0

述語ビットの場合は?項目が 1 または 0 の場合は #t を返します

(define bit?
  (lambda (item)
    (if (equal? item 0)
        #t
    (if (equal? item 1)
        #t
        #f))))

ビットの使い方は?新しい手順では、全ビット? リスト内のすべての項目がビットの場合に #t を返すのは? これが私が試したものである
ことがわかりません。

 (define all-bits?
      (lambda (ls)
        (cond
          [(null? ls) #t]
          [(equal? (car ls all-bits?)) bit?]
          [else (all-bits? ls (cdr ls))]))
4

1 に答える 1

1

あなたの条件の2番目は完全に間違っています。構文的に間違っています。同等?2つのパラメーターを取り、は1つだけを取り、ビットも1つを必要としますが、それぞれ1、2、および0のパラメーターを渡します。それも意味がありません:あなたのヘルパー関数ビット?は単一のアイテムをテストするように設計されていますが、それを使用して何もテストしていません。なぜオールビットなのですか?その行にまったく?

3番目のcond行は構文的に間違っています。ここでも、1つだけを取る関数に2つのパラメーターを渡しています。

'最初のアトムがビットで、2番目のアトムがビットである場合はtrueを返すなど(など)と言う必要があります。その構造は、単にコードで表されていません。

また、すべてのビットは空のリストに対してfalseを返し、単一ビットのリストがある場合はtrueを返す必要があると主張しますが(all-bits? '()) ==> #t、元のコースの質問で指定された可能性があります。

それを自分のやり方で行うには(空のリストに当てはまります)、condには2つのステートメントのみを含める必要があります。

(cond
   ((null? l) #t)
   (else ("Return true if the first atom is a bit **and** if the second atom is a bit **and** the third (and so on, and so on, recursively)"))

私のやり方でそれを行うには、次のようになります。

(cond
   ((null? l) #f)
   ((and (null? (cdr l)) ("something here to test that (car l) is a bit")) #t)
   (else ("Return true if the first atom is a bit **and** if the second atom is a bit **and** the third (and so on, and so on, recursively)")).

引用符で囲まれたビットは実際のコードではないことを明確にする必要があります。

私はあなたのためにあなたの宿題をしていませんが、私のコメントのすべてがあなたがしなければならないことをより明確にしたことを願っています。私のバージョンではなく自分のバージョンを実行しようとしても、実際には、最終行をどのように構成するかについての大きなヒントが含まれています。

の使用方法がまだ示されていない場合は、ネストされたifステートメントを使用してください。

于 2012-10-09T13:38:04.180 に答える