At 7:42 AM +0200 8/20/03, Jan Scheffczyk wrote:
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

Reply via email to