此过程接受布尔值列表,如果看到为假,则应终止并返回false。然而,它运行的方式总是如此。
(define L3 (cons true (cons false empty)))
(check-expect (all-true? L3) false)
(define (all-true? lob)
(cond [(empty? lob) true]
[else
(if (boolean? (first lob))
(all-true? (rest lob))
false)]))
我知道我也可以在else语句之后使用AND子句。
答案 0 :(得分:3)
这应解决问题:
(define (all-true? lob)
(cond [(empty? lob) true]
[(first lob) (all-true? (rest lob))]
[else false]))
说明:
cond
内的不同分支中,而不是在if
的{{1}}部分内写else
。cond
,用于检查值是否为布尔,而不是用于确定它是否为 true 。或者,在Racket中,我们可以使用andmap
获得相同的效果:
boolean?
在其他口译员中,我们可以从SRFI-1导入every
:
(define (all-true? lob)
(andmap identity lob))