「學習」學校Lisp,但不覺得我學習正確。我試圖編寫一個函數,將所有數字添加到由列表,數字和字符串組成的列表中。我忽略了字符串並輸入了列表。我得到了所有的括號完全迷失了方向......爲什麼我的lisp程序沒有運行?
林收到錯誤非法論點函子位置0
(defun add-all (L)
(cond
(
(null L)
(0)
)
(
(listp (car L))
(+ (add-all (car L)) (add-all (cdr L)))
)
(
(stringp (car L))
(+ (add-all (cdr L)))
)
(
t
(+ (car L) (add-all (cdr L)))
)
)
)
哇很容易修復謝謝!問題在於學校班級,「處理字符串」只是特定問題的一個要求(是的,有點愚蠢)。我們的教科書是編程語言的概念(Sebesta),我們正在學習Lisp的功能編程口味。 –
功能性的味道沒有錯,雖然不是Lisp中最常見的,但它被一些人使用,最着名的是Scott McKay。但他們所教的是(遞歸)分而治之的解決問題的方法,而不是函數式編程。根據我的經驗,這種方法使得難以解決的難題變得容易,但是導致後面的代碼難以通過略讀來理解。爲了說明我已經[重寫了代碼](https://gist.github.com/PuercoPop/66137175f6d1bbc5dfe2)的觀點。你會看到它使用的功能只做一件事,並組合它們來解決問題。 (1/2) – PuercoPop
所以他們很可能使用lisp(和其他語言)作爲教導你(其他)概念的工具。但是,如果這種風格是你看到的所有誹謗,那麼可能會給這種語言留下不好的印象(我知道我會這麼做)。如果你想更詳細地學習lisp,你應該看看[Practical Common Lisp](http://www.gigamonkeys.com/book/)。 (2/2) – PuercoPop