因此,我正在實現一個函數,該函數獲取LISP(Allegro mlisp)中列表的前n個元素,並且我似乎無法弄清楚爲什麼我無法進行減法計算。我不斷收到無法從LISP中的數字中減去?
我對這種方法的代碼,它編譯聽者精細
(defun get_upto (n cut_list)
(if (= n 0) cut_list
(cons (car cut_list) (get_upto ((- n 1) (cdr cut_list))))))
但如果我嘗試執行
$: (get_upto 3 '(1 2 3 4 5))
我得到的錯誤
Error: Illegal function object: (- n 1)
我在這裏做錯了什麼?我在傳遞一個數字,並且在檢查n = 0時沒有問題。
在最後一行中有許多圓括號,它爲什麼認爲你想要我們e( - n 1)作爲函數。 – sebs 2014-11-05 04:55:25
並且您可能希望將退出語句更改爲'(= n 0)nil' – sebs 2014-11-05 05:02:17
Common Lisp要求您使括號正確。這與您可能習慣的其他語言不同。圓括號改變程序的含義。它們從不是可選的或無意義的。 – sigjuice 2014-11-05 17:23:01