5

私は SICP に取り組んでおり、いくつかの例をガイルで試してみたいと思っていました。私はストリームの例を試していて、この StackOverflow questionから得た cons-stream の実装が必要でした。ただし、これをguileに入力すると、次のようになります。

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

これの何が問題なのかわかりません - () を '() に置き換えて [ ] を削除しようとしましたが、有効な R5RSのように見えてもまだ機能しません。私は現在 guile 1.8.7 を使用しています。GNUドキュメントで言及されている v2.0.1 のパッケージが表示されません。これが機能しない理由でしょうか?

4

1 に答える 1

8

syntax-rules最初にサポートをインポートする必要があるようです( http://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Syntax-Rules.htmlを参照):

(use-syntax (ice-9 syncase))

次に、角括弧を括弧に変更する必要があります。その後、動作するはずです。

リテラル リストを絶対に引用しないでください。lambdaこれは、式ではなく、フォーマルのような一連の識別子です。

于 2011-05-21T13:37:43.693 に答える