gpt4 book ai didi

common-lisp - 如何将列表传递给普通 lisp 中的宏?

转载 作者:行者123 更新时间:2023-12-03 22:58:28 25 4
gpt4 key购买 nike

我正在尝试将列表传递给宏,例如:

(defmacro print-lst (lst)
`(progn
,@(mapcar #'(lambda (x) `(print ,x)) lst)))
(let ((lst '(1 2 3)))
(print-lst lst))

它捕获错误:“值 LST 不是 LST 类型”。

所以,我的问题是,这段代码有什么问题以及如何将列表传递给宏?

最佳答案

我不确定为什么要将其定义为宏而不是常规函数,但问题是宏不评估它们的参数。如果你给它一个词法变量的名字,它看到的只是名字( 'LST ),而不是绑定(bind)的值。它(正确地)提示符号 'LST不是列表,因此不是 MAPCAR 的有效第二个参数.

您可以将其称为 (print-lst (1 2 3)) , 但是你可以不用宏而只做 (mapc #'print lst)

关于common-lisp - 如何将列表传递给普通 lisp 中的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196080/

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