3
請幫忙。我正在嘗試創建這個Lisp宏,它將一個(數字)列表作爲輸入並返回這些數字的總和。代碼基本Lisp宏問題
(setf g (list 1 2 3 4))
(defmacro add-test(var)
`(+ ,@var))
(附加測試克)給出該錯誤
*****的值G型LIST的不。 *****
[類型TYPE-ERROR的條件]在同一時間(附加試驗(1 2 3 4))給出正確的結果是10。
可以請你解釋,爲什麼變量傳遞給函數時不工作?
其他細節 -
Lispbox - SBCL
提前
感謝Rainer的詳細解答。這有很大幫助。 – bdev 2010-09-20 21:44:01
出於好奇,讓我們說我們進一步採取bdev的想法。假設我有一些可優化的表達式(一個整數列表!),我想在「運行時間」之前優化表達式。我會怎麼做? (儘管我認爲(eval G)可能會奏效......)。 – 2010-09-20 22:22:56
@保羅·納森:你可以EVAL它,編譯它,FUNCALL它,應用它 - 幾乎沒有限制。另請參閱DEFINE-COMPILER-MACRO,它允許您編寫優化。 – 2010-09-20 22:49:03