Lisp newbie here。Common Lisp:無法獲取Paul Graham的書中的解壓縮函數
我正在閱讀Paul Graham的書,ANSI Common Lisp。
在頁38是uncompress
函數。它需要一個成對的列表,其中成對的第一個項目是一個數字,表示應該有多少第二個項目。例如,解壓縮這樣的:
((3 a) (2 b) c)
應該產生這樣的:
(A A A B B C)
我鍵入uncompress
函數成Lisp解釋(GCL-2.6.2-ANSI),然後進行測試它像這樣:
(uncompress '((3 A) B (2 C) (5 D)))
生成此錯誤消息:
Error in IF [or a callee]: Too many arguments.
Fast links are on: do (use-fast-links nil) for debugging
Broken at IF. Type :H for Help.
1 (Abort) Return to top level.
以下是uncompress
函數。我認爲我忠實地輸入了書中的內容。我測試了每件作品,並且每件作品似乎都能正常工作。說實話,我卡住了。我不知道是什麼原因導致了錯誤。我會很感激你的幫助。
(defun uncompress (lst)
(if (null lst)
nil
(let (elt (car lst))
(rest (uncompress (cdr lst))))
(if (consp elt)
(append (apply #'list-of elt)
rest)
(cons elt rest))))
(defun list-of (n elt)
(if (zerop n)
nil
(cons elt (list-of (- n 1) elt))))
不,你的'let'中的變量綁定周圍的參數太少了。這不是Clojure。 :-) –
OPS,有多諷刺!謝謝,糾正。 – Renzo
啊!我看到了失蹤的左派。謝謝!它現在工作完美。順便說一句,我非常喜歡Lisp;這樣一種美麗的語言。 –