方案/球拍:用布尔斯折叠
-
13-12-2019 - |
题
(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
. 不隶属于 StackOverflow