что не так с этим макросом определения-синтаксиса в схеме? - PullRequest
5 голосов
/ 21 мая 2011

Я работаю через SICP и хотел попробовать некоторые примеры в guile.Я пробовал примеры потоков и хотел реализовать реализацию cons-stream, которую я получил из этого вопроса StackOverflow .Однако, когда я набираю это в 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, я не вижу пакет для v2.0.1, о котором упоминает GNU docs , может быть, поэтому он не работает для меня?

1 Ответ

7 голосов
/ 21 мая 2011

Похоже, вам сначала нужно импортировать поддержку для syntax-rules (см. http://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Syntax-Rules.html):

(use-syntax (ice-9 syncase))

Тогда вам нужно заменить квадратные скобки на парены; после этого должно работать.

Определенно не цитируйте список литералов; это последовательность идентификаторов, например lambda формалы, а не выражение.

...