私は2つのプログラムを書いています。1つは takeoutAllButLast で、もう1つは takeoutSecondLast です。
最初にメンバー関数を使用して、背後に X があるかどうかを判断します。
そして、いくつかのデータを試してみると、次のことがわかりました。
最初の引数がシンボルの場合、どちらも機能します!
しかし、cons 構造の場合、どちらも失敗します。
1.// `(a b) `((b b)(a b)(b c)(a b)) ==> `((b b)(b c)(a b))
(defun takeoutAllButLast (X L)
(cond ((null L) nil)
((equal X (first L))
(if (member X (rest L))
(takeoutAllButLast X (rest L))
L))
(t (cons (first L) (takeoutAllButLast X (rest L))))
)
)
2.//`(a b) `((a b)(b b)(a b)(b c)(a b)) ==> `((a b)(b b)(b c)(a b))
(defun takeoutSecondLast (X L)
(cond ((null L) nil)
((equal X (first L))
(if (member X (rest (member X (rest L))))
(cons (first L) (takeoutSecondLast X (rest L)))
(rest L)
)
)
(t (cons (first L) (takeoutSecondLast X (rest L))))
)
私が聞きたいのは、X の背後にまだ 1 つの要素があり、メンバー関数のように使用できるかどうかを判断する方法です。
また、メンバー関数を使用してコンス構造を比較できないのはなぜですか?
私の質問を読んでくれてありがとう!