サブリストを調べるなど、2 つのリストが互いに等しいかどうかを確認する再帰関数の開発に問題があります。これまでのところ、私は持っています:
(defun are-equal2 (X Y)
(cond
((null X) nil)
((and (listp (first X)) (listp (first Y)))
(are-equal2 (first X) (first Y))
)
((eq (first X) (first Y))
T
)
)
)
たまに効くそうです。たとえば、(are-equal2 '((A) B) '((A) B))
T を(are-equal2 '((A) B) '(A B))
返し、nil を返します。しかし、(are-equal2 '(F (A G) B) '(F (T G) B))
Tを返します.....最後の条件に関係があるのではないかと思います。とはいえ、やり直す方法がわかりません。
気にしない笑。返事を待って、いじくり回して、それを手に入れました。ネストされた if ステートメントの束を実行しました。コード:
(defun are-equal2 (X Y)
(if (and (listp (first X)) (listp (first Y)))
(are-equal2 (first X) (first Y))
(if (and (eq (first X) (first Y)))
(if (and (endp (rest X)) (endp (rest Y)))
T
(are-equal2 (rest X) (rest Y))
)
nil
)
)
)