首页 > 解决方案 > 在 Scheme 中 foldr 和 apply 有什么区别?

问题描述

编程语言:Scheme/DrRacket

foldr我认为和之间的用法没有区别apply

谁能解释它们有何不同?据我所知,你可以用 foldr 做同样的事情,你可以用 apply。谢谢!

标签: schemelispracket

解决方案


它们非常不同,尽管在某些情况下它们可能是等价的。


(apply func '(1 2 3))

相当于

(func 1 2 3)

(foldr func 0 '(1 2 3))

相当于

(func (func (func 3 0) 2) 1)

如果函数是关联的和可交换的,并且它允许您提供可变数量的参数,结果将是相同的。例如

(apply + '(1 2 3)) == (foldr + 0 '(1 2 3))

但是foldr可以用来组合只带两个参数的函数的结果,或者使用更灵活的方式来组合结果。

有关更多信息foldr,请参阅DrRacket/Scheme 中的 Map、Filter、Foldr


推荐阅读