如何检查列表是否只包含#t

use*_*736 7 scheme racket

我在球拍和麻省理工学院计划中尝试使用以下代码,让我惊讶的是编译器错误

(foldr and #t '(#t #t #f))
Run Code Online (Sandbox Code Playgroud)

有没有办法使用reduce/fold方式来检查列表是否只包含true或false?我知道lambda可以完成这项工作,但它确实让我们想知道为什么这不是一个有效的代码.我记得我可以在Haskell中做到.....

TIA.

Eli*_*lay 8

and是一个宏,因此它本身没有值.具体来说,它会短路评估,并且在您尝试使用它时没有任何意义.出于这个原因,andmap在这种情况下你可以使用Racket .(其他实现在不同的名称下具有类似的功能 - 例如,srfi-1使用every.)


kni*_*vil 7

并且是一个宏,不能用作函数.把它放在一个函数中:

(foldr (lambda (a b) (and a b)) #t '(#t #t #f))