我有宏let--(如让*使用lambda表达式)在诡诈为什么这个lisp递归宏不起作用?
(define (let-make-lambdas pairs body)
(if (null? pairs)
`((lambda() ,@body))
`((lambda (,(caar pairs))
,(let-make-lambdas (cdr pairs) body))
,(cadar pairs))))
(define-macro (let-- pairs . body)
(let-make-lambdas pairs body))
它工作正常,当我使用一个外部函数做代码生成,但下面的代码(与仅仅是一个宏)不起作用:
(define-macro (let-- pairs . body)
(if (null? pairs)
`((lambda() ,@body))
`((lambda (,(caar pairs))
,(let-- (cdr pairs) body))
,(cadar pairs))))
为什么?
忘了括号? :P – 2013-10-23 18:30:55
宏调用似乎不符合其定义:点缺失。 – sds
@sds'.'用于定义Common Lisp中的'&rest'列表。在第一种情况下,jcubic正在定义一个函数来执行代码扩展,并且_macro_ _does_包含'.' –