【发布时间】:2020-01-23 00:37:50
【问题描述】:
func1, func2.. 都定义了 :: [String]-> Bool
一旦第一个 true 被命中,下面的折叠是否会停止评估函数
foldr (\x acc -> acc || x ) False ( fmap ($ "111") [func1,func2, func3, func4])
想一想,我意识到 fmap 将评估所有 4 个函数,然后将 [Bool] 传递给折叠......一旦它达到 True 就应该停止折叠。
我想我需要问的问题是,是否有办法将 fmap 合并到折叠中,以便在其中一个函数返回 true 时立即停止评估。
【问题讨论】:
-
您说“想一想我意识到 fmap 将评估所有 4 个函数,然后将 [Bool] 传递给折叠......一旦它达到 True 就应该停止折叠”。这是不真实的。仅仅因为它将
[Bool]传递给折叠,not 就意味着函数已被评估。他们会在需要时进行评估:如果您逐步完成纸上的评估,您可以自己了解何时发生这种情况。
标签: haskell