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

您的第二个条件是完全错误的。它在语法上是错误的;平等的?接受两个参数,car只接受一个,bit也需要一个,但您分别传递了 1、2 和 0 参数。这也没有意义:您的辅助功能位?旨在测试单个项目,但您没有用它测试任何东西。为什么是全比特?在那条线上?

第三条cond行在语法上是错误的:同样,您将两个参数传递给一个只接受一个参数的函数。

你需要说'如果第一个原子有点第二个原子有点,并且(依此类推,依此类推),则返回true。您的代码中根本没有表示该结构。

我还争辩说,对于空列表,所有位都应该返回 false,如果你有一个包含单个位的列表,但可能(all-bits? '()) ==> #t在原始课程问题中指定,则返回 true。

按照你的方式去做(对于空列表是真的),你的cond应该只有两个语句;

(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)")).

应该清楚引号中的位不是真正的代码。

我还没有为你做功课,但我希望我的所有评论都能让你更清楚地知道你必须做什么。即使您尝试制作您的版本而不是我的版本,我的版本实际上也包含了一个重要提示,告诉您应该如何构建最后一行。

如果您尚未了解如何使用and,请使用嵌套if语句。

于 2012-10-09T13:38:04.180 回答