Paul Johnson wrote:
Andrew Coppin wrote:

PS. There is a technical distinction between the terms "lazy" and "non-strict", and also the opposite terms "eger" and "strict". I couldn't tell you what that is.

As I understand it, the distinction is between the mathematical term "non-strict" and the implementation method of "lazy". "Non-strict" means that "reduction" (the mathematical term for evaluation) proceeds from the outside in, so if I have (a+(b*c)) then first you reduce the "+", then you reduce the inner (b*c). Strict languages work the other way around, starting with the innermost brackets and working outwards.
[...]

Almost right, but strict and non-strict aren't tied to an operational semantics. In other words, you can talk about _|_ and strictness without knowing how to evaluate your expressions at all. See also

  http://en.wikibooks.org/wiki/Haskell/Denotational_semantics .

For more on the details of lazy evaluation (which actually does work "outside in"), there's the incomplete

  http://en.wikibooks.org/wiki/Haskell/Graph_reduction .

Of course, strict and eager as well as non-strict and lazy have pretty much the same effect and can be used synonymously, but they're different things nonetheless.


Regards,
apfelmus

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to