On Thu, 10 Jan 2002, Mark P Jones wrote: > | If I have defined a function like this.. > | f <args> = <blah> <args> > | it could be re-written.. > | f = <blah> [snip] > - The second will compute a value of <blah> at most > once, then cache the result for future use. That > could make a program run faster, but if the result > of <blah> takes a lot of space, then it could result > in a space leak. The first might end up repeating > the computation of <blah> each time f is called. [snip] > Denotationally, the two expressions are the same. > (In other words, they both produce the same value.) > But the example above shows an operational difference > in some implementation. (As far as I can tell, however, > nothing in the language definition either guarantees or > prevents such behavior.)
Even sillier question: there's no other way of getting the optimization that normCorr' has over normCorr (as always on the understanding it may be a space leak) in Haskell? dotProd xs ys=sum(zipWith (*) xs ys) normCorr :: Floating a => [a] -> [a] -> a normCorr xs ys =(dotProd xs ys)/(sqrt((dotProd xs xs)*(dotProd ys ys))) normCorr' :: Floating a => [a] -> [a] -> a normCorr' xs=let e=sqrt(dotProd xs xs) in \ys->(dotProd xs ys)/(e*(sqrt(dotProd ys ys))) for use in, say, corrWithSimpleSignal = normCorr' [1..100] (this is a contrived example I admit) I sometimes write such things but it doesn't leap out at me on rereading the code later why I've defined e only to have it used (on first glance) only once... ___cheers,_dave_________________________________________________________ www.cs.bris.ac.uk/~tweed/|`...heat generated by its microprocessors will email:[EMAIL PROTECTED]|slope upward exponentially, reaching the power work tel:(0117) 954-5250 |density of a nuclear reactor before 2010'-Intel _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell