这个定义语法宏在方案中有什么问题?

时间:2011-05-21 13:18:20

标签: macros scheme guile define-syntax

我正在为SICP工作,并想尝试一些诡计的例子。我正在尝试使用流示例,并希望实现cons-stream,这是我从this StackOverflow question获得的。然而,当我把它打成诡计时,我得到了:

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的包,这可能就是为什么它不能为我工作?

1 个答案:

答案 0 :(得分:7)

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

(use-syntax (ice-9 syncase))

然后你需要将方括号改为parens;之后它应该有用。

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