入れ子リストについての難しい宿題を解決するのに手伝ってください。 基本的には、述語のevenpが真であるときは、リスト全体の構造を維持しながら、リスト(または入れ子になったリスト)から要素を削除する必要があります。入れ子リストから要素を削除する方法lisp
(Nopred 'evenp '(1 S d ((4)) (7) ((((8)))) u))
これは、これは私が、私はこのコードで解決しようとしたが、それは動作しません
(Defun nopred (f list)
(Cond ((null list))
((Symbolp (car list)) (cons (car list) (nopred f (cdr list)))
((Listp (car list)) (cons (nopred f (car list)) (nopred f (cdr list))))
((Funcall f (car list)) (nopred f (cdr list)))
(T (cons (car list) (nopred f (cdr list))))))
を書いた関数であり、それは要素を削除しません
(1 S d (()) (7) (((()))) u)
を返す必要がありますevenpがtrueの場合、値は
((((5 .T) .).).)
は '(CDRリットル)'コピーエラー:私は、正しい結果を得るこれらの補正で
? '(cdr list)'ではないでしょうか? – Barmar
インデントが修正されると、問題が確認できます。 'Symbolp'行の最後に') 'がないので、そのコードはすべてこのケースの一部として扱われます。しかし、それはエラーを引き起こすはずなので、別のコピーエラーだと思う。適切なインデントで実際のコードを投稿してください。そうでなければ、何が本当に間違っているかはわかりません。 – Barmar
シンボルの特別扱いは理想的に間違っているようです。私はこれが '(evenp S)'&cのエラーを避けることだと理解していますが、これはまだ間違っています。 – sds