2016-11-05 17 views
0

私はリストが回文であるかどうかをテストするpalindromeという関数を書いています。 (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

関連する問題