Unbound variable error when using defmacro in LISP -


i trying use macro 2 forms in lisp, evaluates both forms return result of form 2. below code using -

(defmacro testmac (x body) (prog2 x body)) 

when executing macro following forms, works correctly , return 5 second form.

(testmac (- 10 6) (/ 10 2)) 

however when try execute macro following forms, return error.

(testmac (print a) (print b))  

below error -

debugger invoked on unbound-variable: variable b unbound. type debugger help, or (sb-ext:exit) exit sbcl. restarts (invokable number or possibly-abbreviated name): 0: [abort] exit debugger, returning top level. (sb-int:simple-eval-in-lexenv b #<null-lexenv>) 

why getting error , how can use macro make work?

p.s. cannot use defun need use macro execute (testmac (print a) (print b))

i trying use macro 2 forms in lisp, evaluates both forms return result of form 2.

that's not idea - though might not precise wording. macro should not evaluate code - not without reason. macro transforms code. generated code decides evaluate.

(defmacro testmac (x body) (prog2 x body))  (testmac (- 10 6) (/ 10 2)) 

so x list (- 10 6) , body list (/ 10 2).

your macro returns second list.

cl-user 11 > (macroexpand-1 '(testmac (print a) (print b))) (print b) 

the macro returns form (print b). gets executed.

cl-user 12 > (testmac (print a) (print b))  error: variable b unbound. 

if b undefined error see.

there no magic going on.


Comments

Popular posts from this blog

javascript - Clear button on addentry page doesn't work -

c# - Selenium Authentication Popup preventing driver close or quit -

tensorflow when input_data MNIST_data , zlib.error: Error -3 while decompressing: invalid block type -