您的第二个条件是完全错误的。它在语法上是错误的;平等的?接受两个参数,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语句。