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

返回生成的世代etagcode,这是我期望的,但是

(foldr and false '(true true false))
.

给了我错误

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

10采用函数(占用两个参数,因为我有一个列表),以及一个基本情况,以及列表。如果列表有多于零布尔斯,我希望我的第二行代码返回true,并且它们都是真的,这就是我认为它会起作用的方式。但显然不是。

有帮助吗?

解决方案

And是一种特殊形式,无法使用foldr,它期望步骤作为其第二个参数。试一试:

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

此特定情况的另一个替代方案是使用andmap

(andmap identity '(#t #t #f))
.

其他提示

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

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

Error: unbound variable: and
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top