2016-11-05 75 views
0

我正在寫一個名爲迴文的函數來測試列表是否是迴文。它適用於常規列表(例如(1 2 1))的100%,但如果使用(1(2)1),則會出現錯誤的參數類型錯誤。我的lisp函數有什麼問題?

這裏是我的功能

(defun palindrome (x)      
    (if (NULL x) t       
    (let ((a (car x)) (b (lastelement x))) 
     (if (= a b)       
     (palindrome (cdr (butlast x)))  
     nil))))  

回答

1

功能=是專爲數字保留。當與列表或其他類型的元素一起使用時,它會返回一個錯誤。改用eql

順便說一下,請注意,你的功能是非常低效的。通常(即不是作業),您可以創建列表的反轉副本,並將其與原始列表逐元素進行比較。

+0

非常感謝。由於這是一個家庭作業問題XD,你抓住了我的手,我的教練告訴我們不要使用反轉。 – Gary

+0

我對lisp很新,我完全忘記了=和eq操作符之間的區別。謝謝! – Gary