車を取り、それを逆の車と比較することにより、アトムを含む単一のリストに対して真/偽を返す実用的な回文があります。次に、最初と最後を cdr (reverse (cdr list)) で破棄します。
'(ab) c (ba)) が true を返すように、サブリスト内のアトムで機能させたいと思います。
car がリストであるかどうかを最初に確認し、そうである場合は caar を比較し、null になるまで caar を逆にして続行します。
「オブジェクト #f は適用できません」というメッセージが表示されます。
(DEFINE (pdrome lst)
(cond
; ((NOT (LIST? lst)) DISPLAY "USAGE: (palindrome [list])" )
((null? lst) #t)
((null? (cdr lst)) #t)
((LIST? (car lst))
((null? (car lst) ) () )
((null? (cdr lst) ) () )
((equal? (caar lst) (caar (reverse lst)))
(pdrome (cdar (reverse(cdar lst))))))
((equal? (car lst) (car(reverse lst)))
(pdrome (cdr (reverse (cdr lst)))))
(else #F) ) )
入れ子にならないように、私もこのようにしようとしましたが、これを理解できません。ヒントやヒントをいただければ幸いです。ありがとう!
(LIST? car lst)
palindrome (append (caar lst) (caar (reverse lst)))