2011-05-21 36 views
5

我正在通過SICP工作,並想嘗試一些詭計中的例子。我正在嘗試流示例,並希望實施cons-stream,我從this StackOverflow question獲得。但是當我輸入到這個詭計,我得到:該方案中的這個define-syntax宏有什麼問題?

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上,我看不到一個包含v2.0.1的包,其中GNU docs提到,這可能是爲什麼它不適合我嗎?

回答

7

看起來你需要導入爲syntax-rules第一支撐(見http://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Syntax-Rules.html):

(use-syntax (ice-9 syncase)) 

然後,你需要改變的方括號括號;之後它應該工作。

絕對不要引用文字列表;這是一系列標識符,比如lambda形式,不是表達式。

+0

真棒,非常感謝! – 2011-05-21 16:00:30