1 haskell programming-languages lazy-evaluation multiple-languages
是否有任何编程语言实现逻辑运算的参数交换(例如AND,OR)以便更快地进行评估?
示例(我认为这种方法可以用像Haskell这样的惰性评估语言实现)
A和B.B评估为"True"并且A未评估IF A OR BIF B OR AA在惰性求值下,AND和OR不是可交换的.
foo :: Int -> Bool
foo n = False && foo (n+1) -- evaluates to False
bar :: Int -> Bool
bar n = bar (n+1) && False -- diverges
Run Code Online (Sandbox Code Playgroud)
在急切的评价(严格的语义)和没有副作用的情况下,它们是可交换的.不过,我不知道有些编译器会进行任何常规优化.(常数折叠在一边.)
如果存在副作用,当然,AND/OR不是可交换的.例如,Ocaml编译器不能交换参数,除非它能证明其中至少有一个是无副作用的.