【发布时间】:2013-11-02 04:41:21
【问题描述】:
我在 guile 中有宏 let--(比如 let* 使用 lambdas):
(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
-
宏调用似乎与其定义不符:点不见了。
-
@sds
.用于定义 Common Lisp 中的&rest列表。在第一种情况下,jcubic 定义了一个函数来执行代码扩展,并且 macro does 包括. -
@JoshuaTaylor:我的意思是宏的调用必须有一个
.(如我的回答)或一个@(如你的) -
@sds 哦,我明白你的意思了。
(let-- ...)在定义中可能是(let-- (cdr pairs) . body)。对(只要解决了其他问题)。对不起,我误会了。
标签: macros lambda lisp scheme guile