我map
用来测试值列表以查看它们是否具有给定的属性。然后,我想看看他们是否都拥有该属性并返回如果他们都true
拥有。
所以我的第一个想法是只给出and
列表,(and (list #t #t #f))
但这似乎将整个(#t #t #f)
视为布尔值 true 并返回它。
所以,我想我可以使用foldl
. 我知道这(foldl + 0 (list 1 2 3))
行得通,我认为这也(foldl and #t (list #t #t #f))
应该行得通……但事实并非如此。
在DrRacket(使用#lang racket
)中,我得到错误“ and: bad syntax in: and
”,这不太有用,但在Repl.it(使用BiWaScheme)上,我得到错误“ Error: #<Syntax and> is not a function
”。
所以,我猜这and
是一个宏?支持这一点,如果我只是评估+
I get #<procedure:+>
,但对于and
I get and: bad syntax in: and
(扼要地说,xor
是一个过程但是or
,nor
和nand
不是)。
那么,是宏还是什么(可能是为了方便短路)?如果是这样,将执行“与”操作的布尔函数是什么?