【问题标题】:what's wrong with this define-syntax macro in scheme?方案中的这个定义语法宏有什么问题?
【发布时间】:2011-08-30 05:36:02
【问题描述】:

我正在通过 SICP 工作,并想在 guile 中尝试一些示例。我正在尝试流示例并想要一个 cons-stream 的实现,我从this StackOverflow question 获得。但是,当我将其输入 guile 时,我得到:

guile> (define-syntax cons-stream
  (syntax-rules ()
  [(cons-stream x y) (cons x (delay y))]))
ERROR: invalid syntax ()
ABORT: (misc-error)

我不知道这有什么问题 - 我尝试将 () 替换为 '(),删除 [],但即使它似乎是 valid R5RS,它仍然不起作用。我目前使用的是 guile 1.8.7,我看不到 GNU docs 提到的 v2.0.1 包,这可能是它不适合我的原因吗?

【问题讨论】:

    标签: macros scheme guile define-syntax


    【解决方案1】:

    看来您需要先导入对syntax-rules 的支持(请参阅http://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Syntax-Rules.html):

    (use-syntax (ice-9 syncase))
    

    那你需要把方括号改成parens;之后它应该可以工作了。

    绝对不要引用文字列表;这是一个标识符序列,例如 lambda 形式,而不是表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多