Я изучаю, как работает макросистема в Scheme, и я пытаюсь сделать мой код более похожим на JavaScript-y. Поэтому я подумал, что начну с макроса function
. Это, как я хочу, определение функции, чтобы посмотреть:Ошибка при расширении макроса в схеме курицы
(function id (x) x)
Оно должно расширяться следующее:
(define (id x) x)
Так я пишу макрос следующим образом:
(define-syntax function
(lambda (name args . body)
`(define (,name ,@args) ,@body)))
Однако, когда я используйте его. Я получаю следующую ошибку (в схеме курицы):
Error: during expansion of (define ...) - in `define' - lambda-list expected: (define ((function id (x) x) . #<procedure (rename sym1348)>) #<procedure (compare s11400 s21401)>)
Call history:
<syntax> (function id (x) x)
<eval> (##sys#cons (##core#quote define) (##sys#cons (##sys#cons name args) body))
<eval> (##sys#cons (##sys#cons name args) body)
<eval> (##sys#cons name args) <--
Где я иду не так? Кроме того, как я могу прочитать такие сообщения об ошибках, чтобы иметь возможность самостоятельно отлаживать программу?