4

私はDrRacketで作業しており、「プレフィックス」関数(#langラケット)を作成しようとしています。2つのリストを入力として受け取り、がnullであるか、の先頭に等しい#t場合に出力する必要があります。pfls

pf私の問題は、がプレフィックスではなく、lsnulllsでない場合、コードが何も返さないように見えることです。#fifステートメントのinをのような他の何かに置き換えると'()、それは適切に返されますが、'()代わりにをキャプチャしてそれに基づいて出力しようとすると、意味のない結果が得られます('()たとえば、 't null、またはそれ'()は等しくありません'())。condステートメント内にifステートメントがあることと関係があるようです。誰かがそれが何をしているのか、またはその理由を教えてもらえますか?このコードを正しく機能させることは可能ですか、それとも別の方法で作り直す必要がありますか?

助けてくれてありがとう!

(define prefix
  (lambda (pf ls)
    (cond
      [(null? pf) #t]
      [(null? ls) #f]
      [(if (equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls)) #f)])
      ))
4

1 に答える 1

8

条件のif範囲内にあるcondことは、通常、何か間違ったことをしていることの兆候です。私はあなたがこれを言うつもりだったと思います:

(define prefix
  (lambda (pf ls)
    (cond
      [(null? pf) #t]
      [(null? ls) #f]
      [(equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls))]
      [else #f])))
于 2012-09-18T16:17:08.800 に答える