为什么评估会停止?

zer*_*ing 0 haskell

我有以下代码:

foldr const 0 ([1] ++ undefined)
Run Code Online (Sandbox Code Playgroud)

我得到了结果1.

我知道,这foldr是正确的关联.写出上面的例子:

const 1 (const undefined 0)
Run Code Online (Sandbox Code Playgroud)

为什么括号中的表达式不会被评估为第一个?

因为函数应用程序的优先级高于括号?

sep*_*p2k 6

为什么括号中的表达式不会被评估为第一个?

Haskell使用惰性评估.这意味着如果函数使用它,则计算参数.这与急切评估的不同之处在于,在调用函数之前执行函数的所有参数.

因为函数应用程序的优先级高于括号?

优先权与它无关.优先刚刚确定哪些是一个操作数是什么(即是"X ??? !!!ŸZ"运营商的应用程序???的操作数xy !!! z或操作者!!!x ??? yz).它不会影响评估顺序.