5
(foldr + 0 '(1 2 3 4))

返回10这是我所期望的,但是

(foldr and false '(true true false))

给我错误

and: expected an open parenthesis before and, but found none

foldr接受一个函数(它接受两个参数,因为我有一个列表)、一个基本情况和一个列表。如果列表有多个布尔值并且它们都是真的,我希望我的第二行代码返回真,这就是我认为它会起作用的方式。但显然不是。

4

2 回答 2

8

And是一种特殊形式,不适用于foldr,它需要一个过程作为其第二个参数。试试这个:

(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case

这种特殊情况的另一种选择是使用andmap

(andmap identity '(#t #t #f))
于 2012-03-14T00:39:46.830 回答
0

在 Scheme 系统中,and通常定义为宏或特殊形式,而不是过程,这就是它不起作用的原因:

#;1> +
#<procedure C_plus>
#;2> and

Error: unbound variable: and
于 2012-03-14T00:42:35.493 回答