4 ms·
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
by andreasvc 13y ago
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.
- gizmo686 13y agoI 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.
- voxfrege 13y ago> 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.