Doug Hoyte 在他对 Let Over Lambda 的介绍中将 symb 函数定义为使用宏进行元编程的基本实用程序:
在剪辑中:
(defun mkstr (&rest args)
(with-output-to-string (s)
(dolist (a args) (princ a s))))
(defun symb (&rest args)
(values (intern (apply #'mkstr args))))
为什么符号在宏编程中如此重要?
最佳答案
Symbols name 函数和宏,所以如果你的宏定义了函数,它就必须构造符号。
例如,当您执行 (defstruct foo a b c)
时,您正在定义这些函数:
MAKE-FOO
FOO-P
COPY-FOO
FOO-A
FOO-B
FOO-C
(SETF FOO-A)
(SETF FOO-B)
(SETF FOO-C)
这需要构建上面的 6 个符号。
附言。您可能会发现 (macroexpand-1 (defstruct foo a b c))
的输出很有启发性。
关于macros - 让出 Lambda : symbolic representation in macros,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36160499/