(defun simplify (x)
(if (and (not (null x)) (listp x))
(if (and (equal '(car x) '(cadr x)) (equal '(car x) 'not))
(simplify (cddr x))
(cons (car x) (simplify (cdr x)))
)
'nil
)
)
この Lisp 関数は、式を引数として取り、余分な 'not' を削除して返すことを意図しています。引数が空でないリストかどうかをチェックし、そうでない場合 (基本ケース) は nil を返します。空でない場合は、car(x) = car(cdr(x)) = 'not' かどうかを確認します。それらが 'not' のペアであることが検出されない場合は、再帰してリストに基づいて構築し、返す必要があります。それらが両方とも 'not' であることが検出された場合、再帰する必要がありますが、car(x) と car(cdr(x)) の両方をスキップします。現在、このコードは引数と同じ式を返すだけなので、問題はネストされた if ステートメントの条件が適切に設定されていないことだと思います。car(x) と cadr(x) を確認するにはどうすればよいですか?どちらも「ない」ですか?