A good functional programming language has a good &quot;code algebra&quot; after parsing to which algebraic transformations can be applied for optimization.<div><br></div><div>For example, reducing the need for generating intermediate data structures.</div>
<div><br></div><div>See: fusion.</div><div><br></div><div><br><br><div class="gmail_quote">On Tue, Jun 19, 2012 at 3:01 PM, Matt Ford <span dir="ltr">&lt;<a href="mailto:matt@dancingfrog.co.uk" target="_blank">matt@dancingfrog.co.uk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi All,<br>
<br>
My last question got me thinking (always dangerous): an expression<br>
that doubles a list and takes the 2nd element (index 1), I assume,<br>
goes through the following steps.<br>
<br>
double (double [1,2,3,4]) !! 1<br>
double ( 1*2 : double [2,3,4]) !! 1<br>
1*2*2 : double ( double [2,3,4] ) !! 1<br>
1*2*2 : double ( 2*2 : double [3,4] ) !! 1<br>
1*2*2 : 2*2*2 : double ( double [3,4] ) !! 1<br>
2*2*2<br>
8<br>
<br>
Up until the element requested all the proceeding elements have to<br>
have the expression formed as Haskell process the calculation.<br>
<br>
Now, I want to compare this to using function composition<br>
<br>
( double . double ) [ 1 ,2, 3, 4 ] !! 1<br>
<br>
This is the bit I&#39;m unsure of - what does the composition look like.<br>
It is easy to see that it could be simplified to something like:<br>
<br>
( double . double) (x:xs) = x*4 : (double . double) xs<br>
<br>
This would mean the steps could be written<br>
<br>
(double . double) [ 1,2,3,4 ] !! 1<br>
(1*4 : (double.double) [2,3,4]) !! 1<br>
(1*4 : 2*4 : (double.double) [ 3,4 ]) !! 1<br>
2*4<br>
8<br>
<br>
Ignoring the start and end steps, it will be half the number of steps<br>
compared to the application version.  Significant then, over long<br>
lists.<br>
<br>
So is this true, are composite functions simplified in Haskell in<br>
general so that they may have improved performance over function<br>
application?<br>
<br>
I&#39;ve seen posts on the internet that say it&#39;s a matter of style only:<br>
<a href="http://stackoverflow.com/questions/3030675/haskell-function-composition-and-function-application-idioms-correct-us" target="_blank">http://stackoverflow.com/questions/3030675/haskell-function-composition-and-function-application-idioms-correct-us</a>.<br>

 But my reasoning suggests it could be more than that.<br>
<br>
Perhaps, function application is similarly optimised - maybe by<br>
replacing all functions applications with composition and then<br>
simplifying?  Or maybe the simplifying/optimisation step never<br>
happens?  As you can see I&#39;m just guessing at things :-)  But it&#39;s<br>
nice to wonder.<br>
<br>
Many thanks for any pointers,<br>
<br>
Matt.<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>--<br>Regards,<br>KC<br>
</div>