gpt4 book ai didi

lisp - 超过 1 行代码的宏

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:37 26 4
gpt4 key购买 nike

正在学习Common Lisp的宏系统,突然发现一个问题

(defun hello () (format t "hello ~%")) 
(defun world () (format t "world ~%"))
(defmacro call-2-func (func1 func2)
`(,func1)
`(,func2))

(macroexpand-1 '(call-2-func hello world))
(WORLD)
T

嗯。为什么我不能只从一个宏生成 2 个 LoC?我该如何解决? (progn 将无法在更复杂的情况下工作...)

最佳答案

您的宏只需返回一个 形式即可调用这两个函数。
相反,您生成了两种形式(并且只使用了最后一种。)

尝试:

(defmacro call-2-func (func1 func2)
`(progn (,func1) (,func2)))

或者如果您不想仅限于 2 个功能:

(defmacro call-funcs (&rest funcs)
`(progn ,@(mapcar #'list funcs)))

关于lisp - 超过 1 行代码的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14930091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com