我开始学习lisps,目前正在为学校制作Macros。我在名为decrement.txt]的txt文件中创建了一个名为“-=”的简单宏。
(defmacro -= (numericValue decrementValue) (list 'setf numericValue (- numericValue decrementValue)) )
因此,传递的参数是numericValue(将减少的值)和decrementValue(将减少numericValue的量)]
当我在CLISP中运行代码时(这是GNU CLISP 2.49),我像下面这样运行它...
[1]> (load "decrement.txt" :echo T :print T) ;; Loading file pECLisp.txt ... (defmacro -= (numericValue decrementValue) (list `setf numericValue (- numericValue decrementValue)) ) -= ;; ;; Loaded file pECLisp.txt T [2]> (setf x 5 y 10) 10 [3]> (-= x 1) *** - -: X is not a number The following restarts are available: USE-VALUE :R1 Input a value to be used instead. ABORT :R2 Abort debug loop ABORT :R3 Abort debug loop ABORT :R4 Abort main loop
“ X不是数字”的含义是什么,这与宏不知道变量的实际值有关吗?因为当我键入
USE-VALUE
并输入5(X应该是哪个值)时,它运行得非常好,即使当我(print x)
将x表示为4时,因为它在函数中递减了。因此该值会发生应有的变化,但是当我最初运行该“-=”函数时,它给出了该错误,我该如何解决?
我开始学习lisps,目前正在为学校制作Macros。我在名为decrement.txt的txt文件中创建了一个名为“-=”的简单宏(defmacro-=(numericValue decrementValue)(list'...
辛苦了,您只在宏中缺少对参数的评估。如果使用`(斜引号),则可以写为:]
(defmacro -= (numericValue decrementValue)
`(setf ,numericValue (- ,numericValue ,decrementValue))
)