为什么elisp宏返回的功能的应用程序不起作用?
|
例如,这是一个宏:
(defmacro my-macro (x y)
(if (> x 0)
`(lambda (z) (+ z ,y))
`(lambda (z) (+ ,x z))))
(my-macro 2 3)
返回(lambda (z) (+ z 3))
但是,((my-macro 2 3) 1)
返回错误,
Debugger entered--Lisp error:
(invalid-function (my-macro 2 3))
((my-macro 2 3) 1)
eval(((my-macro 2 3) 1))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp nil nil)
我想念什么?
没有找到相关结果
已邀请:
2 个回复
扇献隙
)或宏lambda表达式(即
)。第一个元素也可以是符号,其功能插槽中包含一个有效的第一个元素。
没有必需的格式,因此它是无效函数。 如果您习惯使用Scheme,在该函数中对函数调用的函数部分进行了正常评估,请注意,这在Lisp中不能完全相同,因为Lisp中的函数具有不同的命名空间(
查找
的函数槽,而“ѭ9”的值通常是其值槽)。 如果要评估正常值之类的函数,可以使用use11ѭ或
。
冕偷淮款
要么
或类似的东西,以便对宏进行评估。