我試圖拿起Lisp的作爲我的新的語言,我有工作如何有一個函數的部分工作傳遞給它的列表中的每個元素的一些問題。defun定義一個列表作爲參數
學習如何解決這個問題的目的,我想寫師的一個非常基本的形式在列表的元素之一是0不發牢騷(而是隻返回0)
(defun divtest (elements)
(dolist (x elements)
(if (zerop x) 0())
(/ elements)))))
我嘗試運行此爲:
(divtest '(20 2 5))
其中產量:
*** - /: (20 2 5) is not a number
失敗的原因似乎源於這樣一個事實:在將它們傳遞給函數之前,我並沒有「提取」列表中的元素(在這種情況下,既沒有/也沒有dolist按預期工作,因爲x從不計算爲0)。 如果我是對的,有人可以告訴我如何執行這個「提取」?
注:這個問題是有關one that I've asked earlier,但我不清楚這以前的答案的一部分,實際上是允許它工作打算與這個特定的問題,我決定進一步進入基礎
使用REDUCE而不是APPLY –
只是好奇:它的功用是什麼? – Hugh
這樣你可以處理任意長列表,而不僅僅是CALL-ARGUMENT-LIMIT(一個標準的CL常量)最大長度。 Common Lisp具有一個依賴於實現的最大參數數量。這個數字必須是50或更大。這意味着一個實現只需要支持50個參數(或更多)。因此,在某些實現中,上面的函數可能會失敗,其中數字列表比調用函數/允許的參數數量更長。 –