Hi Andrew,
let x = expensiveComputation foo in x + x
I would certainly hope that expensiveComputation wasn't called twice, and even though the language doesn't guarantee it, I have already written code that assumed it.
I always thought that there is a tiny difference between "let" and "where": Using "let" "expensiveComputation foo" might be computed twice (depending on the compiler?). But using:
x + x where x = expensiveComputation foo
should compute the value for x only once. Therefore, I always try to use "where" for common subexpressions.
Please correct me if I'm wrong here.
The reserved word "let" introduces an expression (a "let-expression"), but there's no such thing as a "where-expression". The reserved word "where" can be used only in definitions.
For example,
3 + ((x + x) where x = expensiveComputation foo)
is invalid syntax, whereas
3 + let x = expensiveComputation foo in x + x
is OK.
And here's a use of "where" in a definition:
let z = x + x where x = 2 in z*5
That could have been written using only "let":
let z = let x = 2 in x + x where x = 2 in z*5
Watch out for the Hugs 98 command line-- it allows
z*5 where z = x + x where x = 2
but that's not a truly valid expression, because you can't embed it in a larger expression:
2 + (z*5 where z = x + x where x = 2)
is properly identified as a syntax error.
Regards,
--Ham -- ------------------------------------------------------------------ Hamilton Richards, PhD Department of Computer Sciences Senior Lecturer The University of Texas at Austin 512-471-9525 1 University Station C0500 Taylor Hall 5.138 Austin, Texas 78712-1188 [EMAIL PROTECTED] [EMAIL PROTECTED] ------------------------------------------------------------------ _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
