gpt4 book ai didi

function - 使用 Common Lisp 宏自动生成的预定义函数

转载 作者:行者123 更新时间:2023-12-04 02:21:17 25 4
gpt4 key购买 nike

宏可以在全局范围内创建函数。例如:

(defmacro test-macro (&body functions)
`(progn ,@(loop for function in functions
collect `(defun ,function ()
*some-interesting-thing*))))

另一个示例(尽管有方法)是为 CLOS 类自动生成的访问器。

函数不是在宏扩展时定义的,而是在编译/解释生成的代码时定义的。这可能会造成一些困难。如果需要这些功能,则会抛出警告。在正确定义这些函数之前定义这些函数的惯用方法是什么?一种可能的解决方案如下:

(defmacro test-macro (&body functions)
(macrolet ((empty-function (name)
`(defun ,name ())))
(dolist (function functions)
(empty-function function)))
`(progn ,@(loop for function in functions
collect `(defun ,function ()
*some-interesting-thing*))))

请注意,中间函数是在宏扩展期间定义的。

最佳答案

如果你需要在编译时在顶层定义一个函数,那么使用:

(eval-when (:compile-toplevel)
(defun foo ...))

请注意,您可以定义一个生成此类代码的宏。这样的表格可以是 PROGN 的一部分。

关于function - 使用 Common Lisp 宏自动生成的预定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29103345/

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