我有一個函數和一個調用該函數的宏。 爲了看到不同之處,我追蹤了函數,發現它是直接調用還是從宏調用都沒有區別。 我想知道爲什麼從宏調用參數時未被評估。 我知道傳遞給宏的參數不會被評估,但即使這發生在從宏傳遞給函數的參數上? 具體而言,我的意思是爲什麼(< 7 5)傳遞給GEN-口齒不清當沒有評價爲零來自宏的函數調用的參數評估
功能:
(defun gen-lisp (expr binds)
expr)
宏:
(defmacro dsptch-prove-query (query binds)
`(if (eq (car ',query) 'lisp)
,(gen-lisp (cadr query) binds)
(prove-query ',query ,binds)))
從宏中調用時的結果:
(dsptch-prove-query (lisp (< 7 5)) nil)
1. Trace: (GEN-LISP '(< 7 5) 'NIL)
1. Trace: GEN-LISP ==> (< 7 5)
NIL
結果時直接調用:
(gen-lisp '(< 7 5) 'NIL)
1. Trace: (GEN-LISP '(< 7 5) 'NIL)
1. Trace: GEN-LISP ==> (< 7 5)
(< 7 5)
如果我只是做了這樣的下面,它被評估爲零了。
(gen-lisp (< 7 5) nil)
1. Trace: (GEN-LISP 'NIL 'NIL)
1. Trace: GEN-LISP ==> NIL
NIL
我假設一個函數的參數評估是遞歸的。奇怪的是,從我的角度來看,它只被評估一次。 – user1461328