Re:What's wrong with Object-Oriented Programming and Functio...
by andreasvc on Wednesday November 13, 2013 @05:09PM
(#6728992)
Well, the Boolean operators in C-like languages are NOT normal functions, which is the point. Furthermore, what is strict about them is the order in which their operands are evaluated, which is a different aspect than the one you mention: whether all arguments are evaluated before considering the function. Consider e.g., notUnderAttack() || enableDoomsdayDevice(). A lazy language is free to decide that it's more optimal to evaluate the second operand first.
[ Parent
| on HN ]
Re:What's wrong with Object-Oriented Programming and Functio...
by gizmo686 on Wednesday November 13, 2013 @06:37PM
(#6729432)
I don't think a lazy language can necessarily make that decision. Consider the simple implementation of ||:
||(f,g){
if (eval(f)) then return true
if (eval(g)) then return true
return false
}
A lazy language will not evaluate a function until it knows it needs it. In this implementation, there is no way of knowing that g will be needed until after computing f, so f will be computed first. Having said that, it is possible for an optimizing compiler to realize that the order doesn't matter and make a decision on which one to check first, however that is an optimization that the compiler would need to prove does not change the results.This seems like a good example of why purity seems to be really beneficial to lazy evaluation.
Re:What's wrong with Object-Oriented Programming and Functio...
by voxfrege on Thursday November 14, 2013 @02:34AM
(#6731111)
> Well, the Boolean operators in C-like languages are NOT normal functions, which is the point.
"Not normal", because the language is strict, and there is no way to make a lazy function on your own, even when it is so tremediously useful.
In other words, the C standard comittee decides which functions may be lazy. As a Haskell programmer, you decide.