Я начал изучать шрифты и сейчас работаю над макросами для школы. Я создал простой макрос с именем «- =» в текстовом файле с именем decment.txt
(defmacro -= (numericValue decrementValue)
(list 'setf numericValue (- numericValue decrementValue))
)
. Таким образом, передаются следующие параметры: numericValue (значение, которое будет уменьшено) и decmentValue (количество, на которое numericValue будет уменьшено by)
Когда я запускаю код в 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, потому что он был уменьшен в функции. Таким образом, значение изменяется, как и должно, но когда я первоначально запускаю эту функцию "- =", это дает эту ошибку, как я могу это исправить?