如果谓词位?如果项目为1或0,则返回#t
(define bit?
(lambda (item)
(if (equal? item 0)
#t
(if (equal? item 1)
#t
#f))))
我怎么用bit?在一个新程序中,所有位?如果列表中的所有项都是位,则返回#t?我无法弄明白 这就是我的尝试。
(define all-bits?
(lambda (ls)
(cond
[(null? ls) #t]
[(equal? (car ls all-bits?)) bit?]
[else (all-bits? ls (cdr ls))]))
答案 0 :(得分:1)
cond 条件中的第二个完全错误。它在语法上是错误的; 相等?需要两个参数, car 只需要一个,位也需要一个,但是你分别传递了1,2和0个参数。这也没有意义:你的帮助函数 bit?旨在测试单个项目,但你没有用它测试任何东西。为什么是全位?在那条线上?
第三个 cond 行语法错误:再次,您将两个参数传递给只需要一个的函数。
你需要说'如果第一个原子有点则返回true; 第二个原子有点和(依此类推,等等)。该结构根本没有在您的代码中表示。
我还认为all-bits应该为空列表返回false,如果列表中有一位,则为true,但在原始课程问题中可能指定了(all-bits? '()) ==> #t
。
按照您的方式执行(对于空列表是正确的),您的 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)")).
应该清楚引号中的位不是真正的代码。
我没有为你完成你的作业,但我希望我的所有评论都能让你更清楚你要做什么。即使你试图做你的版本而不是我的版本,我的实际上还包括一个很大的提示,你应该如何构建最后一行。
如果您尚未展示如何使用和,请使用嵌套的 if 语句。