我正在学习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) <--
我哪里错了?另外,如何阅读这些错误信息以便自己调试程序?