On Tue, Dec 04, 2007 at 03:35:28PM -0800, Ryan Ingram wrote: > On 12/4/07, Stefan O'Rear <[EMAIL PROTECTED]> wrote: > > > > "Is there a reason why 2 + 2 is defined as 4 instead of, for example, > > 5?" > > Wow. That wasn't really necessary. 4 has a clear meaning (the number after > the number after the number after the number after zero) which is equivalent > to 2 + 2. I'm not talking about naming issues; you could say that 5 was > that number but then nobody would know what you are talking about. I am > asking about the history & motivation behind the original definition of > strictness, not arguing for a redefinition.
Oh. Sorry. > > Strictness is more useful in practice, simpler to define, and easier to > > approximate. > > Please elaborate; this is exactly why I asked. In particular, "more useful > in practice" is the thing I am most curious about. When you see an expression of the form: f a you generally want to evaluate a before applying; but if a is _|_, this will only give the correct result if f a = _|_. Merely 'guaranteed to evaluate' misses out on some common cases, for instance ifac: ifac 0 a = a ifac n a = ifac (n - 1) (a * n) ifac is guaranteed to either evaluate a, or go into an infinite loop - so it can be found strict, and unboxed. Whereas 'ifac -1 (error "moo")' is an infinite loop, so using a definition based on evaluation misses this case. > > What benefit does your notion offer? > > Well, one usually says something like "f is strict in its 2nd argument" > which on casual reading tends to make me think that it has something to do > with the argument. By the actual definition, however, f _ _ = undefined is > strict in all of its arguments; but it's clear from the definition that the > arguments are irrelevant. Stefan
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe