gpt4 book ai didi

macros - Lisp宏的基本思想

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

我尝试在 Lisp 中做一件非常简单的事情——找到一种方法来打开一个全局有值(value)的 nodebug t 然后一些调试格式的形式就会沉默。为此,我发现我无法理解以下内容的区别:

(defparameter *nodebug* t)
(setf x 1)

;;; the basic function

(format t "x is ~a" x) ;;; generate -> x is 1


;;; try to use function not macro

(defun formatdf (stream string &rest allparm) ;;; later add (if ...
(format stream string allparm))

(formatdf t "x is ~a" x) ;;; generate -> x is (1)


;;; try to use macro

(defmacro formatdm (stream string &rest allparm) ;;; later add (if ...
(format stream string allparm))

(formatdm t "x is ~a" x) ;;; generate -> x is (X)

生成的代码(或函数代码)似乎与原始格式形式不同。我的下一步应该做什么?

最佳答案

(defmacro formatdm (stream string &rest allparm) ;;; later add (if ...
(format stream string allparm))

宏应该返回源代码,而不是执行。这里只有在宏扩展时查看 allparm 的值才有用。它是源代码的一部分:(x)

您需要返回一个包含必要说明的列表 - 这里是调用格式的代码。

这是一本关于 Lisp 的非常好的书,它也应该解释宏的基础知识:http://www.cs.cmu.edu/~dst/LispBook/

关于macros - Lisp宏的基本思想,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989778/

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