2014-04-20 50 views
2

我试图在reduce使用逻辑操作,例如:方案使用和运营商降低

(reduce and '(#t #t #t) 0) 

这给了我一个错误,我不知道为什么。

(reduce + '(1 2 3) 0) 

这很好,但是当我尝试使用内置的and操作时,它失败了。 有人可以解释我为什么不工作?我被迫在逻辑运算上使用reduce

+2

'和'不是一个函数,如泰耶d表示,但你可以让你自己传递:'(foldl(lambda(xy)(and xy))#t'(#t #t))'''''t' :-) –

回答

4

reduce需要一个函数作为它的第一个参数,而and是一个特殊的形式。由于特殊形式不是头等对象,因此它们不能用作函数的参数(或存储在变量中)。

在这种情况下reduce一种替代方法是

(every identity list-of-booleans) 

(any identity list-of-booleans) 

是一个工作替代(reduce or ...)

+0

是'every'和'any'标准的Scheme功能/构造S' –

+0

@RSahu差不多。像'reduce'一样,它们在[SRFI-1列表库](http://srfi.schemers.org/srfi-1/srfi-1.html)中指定。 – Sylwester

+0

@Terje D.我需要使用reduce函数。因为我知道,我认为我可以工作,并且是特殊形式而不是操作员。制作我自己的,会更容易,我想..非常感谢 – user3100209