我是通用lisp的新手,當我在函數參數聲明中看到&rest
時,我認爲它與ruby
中的*args
類似。我開始寫一個函數sumit
來做和+
一樣的功能。如何處理共同lisp的`&rest`參數
(defun sumit (&rest args)
(if (null args)
0
(+ (car args) (sumit (cdr args)))))
但是當我調用(sumit 1 2 3)
它得到分段錯誤,遞歸永遠不會結束。 (sumit)
雖然工作。
所以我的懷疑是(null args)
的一部分,但是在改變(eql nil args)
之類的東西之後不起作用。
那麼什麼是正確的方法來分解&rest
參數?什麼是檢查nil
的正確方法?
'SUMIT'將可變數量的數字作爲參數,但是在'(sumit(cdr args))'中,您使用單個列表參數調用它,而不是數字。你需要使用'(apply#'sumit(cdr args))'代替。 – jkiiski
@jkiiski ohhh,沒錯!謝謝!順便說一句,有什麼辦法可以將列表擴展爲多個參數,而不使用'apply'嗎? – delta
@delta:no,use APPLY –