gpt4 book ai didi

common-lisp - 使用宏动态生成函数

转载 作者:行者123 更新时间:2023-12-02 06:06:30 28 4
gpt4 key购买 nike

我将一个宏放在一起以生成样式的简单功能:

(defun hello ()
(format t "hello~&"))

每个新功能将替换为hello。
(defmacro generate-echoers (list)
`(let ((list-of-functions
(loop for var in ,list
collect
`(defun ,(intern var) ()
(format t ,(concatenate var "~&"))))))
`(progn
,list-of-functions)))

我开发了上述功能,最终证明了我还没有掌握报价时间和扩展阶段。

所需用法如下:
(generate-echoers'(“hi”“ping”“pong”))=>;函数列表,每个函数都说出自己的名字,就像HELLO在上面所做的那样。

最佳答案

您的代码可以简化并变得更正确,如下所示:

(defmacro generate-echoers (list)
`(progn ,@(loop :for var :in list
:collect `(defun ,(intern (format nil "~:@(~A~)" var)) ()
(format t ,(concatenate 'string var "~&"))))))

首先,必须将 loop的结果拼接到生成的主体中。

您也忘记了, concatenate带有类型参数,并且要大写所有的var(否则,您将获得像 |foo|这样的函数名)。

关于common-lisp - 使用宏动态生成函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8918373/

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