我正在为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的包,这可能就是为什么它不能为我工作?
答案 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
形式,而不是表达式。