2013-04-01 184 views
0

我練習,我有以下功能:奇怪類型的功能

(defun ifnot (test e1 e2) 
    (if test e2 e1)) 

有人問我來形容下式的評價:

(ifnot nil "OK" (error "Unexpected test outcome")) 

我不知道,如果問題是關於標記「無」或關於內建錯誤,你可以幫我嗎?

+1

如果它是一個宏觀而不是,那就你似乎打算工作什麼問題?練習是關於何時以及是否評估函數的參數。 – sepp2k

+0

練習說評估函數調用(ifnot無「OK」...)會產生一個錯誤,我想知道錯誤將會是什麼 – user2233777

+0

意外的測試結果? '(如果不是零...)'_應該像'一樣工作(如果......)'是嗎? –

回答

2

ifnot,就像你寫的那樣,是一個函數。評估函數時,在評估函數體之前評估所有參數。雖然e2的值在您的示例中丟失,但e2仍在評估中,因此仍會調用error

(defmacro ifnot (test e1 e2) 
    `(if ,test ,e2 ,e1)) 

這樣,代碼

(ifnot nil "OK" (error "Unexpected test outcome")) 

在編譯時替換爲:

(if nil (error "Unexpected test outcome") "OK")