當你寫'((3 a) (2 b) (1 c))
,有沒有字符串:沒有單引號的字符串(沒有這樣的事情在Lisp中),沒有雙引號的字符串。你有這樣的價值:
(quote ((3 a) (2 b) (1 c)))
QUOTE
是特殊的運算符,防止其子窗體的評價。引用內部的內容是字面常量數據,它被讀取但不被評估。
在這裏,你有列表的列表,它們中的每一個含有數在第一位置,和一個符號作爲第二元件。特別是沒有字符串。
符號是具有名稱(字符串)的對象。每次出現相同的符號x
指的是相同的對象。下面在這裏,所有的x
指向同一個符號:
((3 x) (2 x) (1 x))
在代碼中,你只需要檢查是否存在一個整數,並使用零爲別的:花車,字符串,符號,向量,散列表,CLOS情況下,...
在代碼中的一個大問題是,你檢查變量list
(一個不好的名字,因爲你不知道這是否是一個列表)是一個整數,但那麼你繼續採取這個整數的第一個和休息:這是保證 失敗!
(defun f (form)
(typecase form
;; cons cell: recurse
(cons (+ (f (first form))
(f (rest form))))
;; integer: form is the value
(integer form)
;; anything else: zero
(t 0)))
如果您的數據始終遵循相同的模式(夫婦有一個數字,一個符號列表),你可以簡單地遍歷每對,總結數量:
(loop for (number symbol) in list sum number)
1.在同一package,如果你不非國際的符號。
這是一個很好的Lisp介紹:https://www.cs.cmu.edu/~dst/LispBook/它也將解釋符號以及如何使用它們。 –