pep*_*e22 6 evaluation haskell functional-programming declarative lazy-evaluation
该函数如何返回true?
foldr (||) False [True,undefined]
=> True
Run Code Online (Sandbox Code Playgroud)
第一个折叠看起来像这样:
undefined || True
Run Code Online (Sandbox Code Playgroud)
,这应该返回一个错误
因此,我猜测haskell优先考虑OR函数的懒惰,而不是逐步进行折叠.找到一个True
在途中并在开始折叠之前返回
它是否正确?在那种情况下,haskell是否总是优先于非惰性函数的惰性函数?我认为这是懒惰的定义,但似乎可以改变错误的答案
Wil*_*ess 12
根据定义foldr
,
foldr (||) False [True,undefined]
=
True || foldr (||) False [undefined]
Run Code Online (Sandbox Code Playgroud)
根据定义(||)
,
True || _ = True
Run Code Online (Sandbox Code Playgroud)
所以没有必要知道右手表达的价值来知道答案.
foldr
并没有做自己的步骤.该过程由减速器功能的要求驱动.
编辑:没什么好笑的.根据所涉及的定义,直接完成每个评估步骤.