Aaron Denney <[EMAIL PROTECTED]> writes: > With a recursive function of more than one argument, does it make sense > to keep the arguments that tend to remain constant closer to the front? > > i.e. > > Will any implementations notice interp y x:xs calls interp y, and keep > some sort of interp y partial application around?
Systems which perform lambda-lifting will usually be tuned this way, as the same optimization also speeds up tail recursion. For example: interp y xs = interpaux xs where interpaux [] = ... interpaux (x:xs) = ... interpaux xs ... Will be lambda-lifted to the original interp definition, with an extra call: interp y xs = interpaux y xs interpaux y [] = ... interpaux y (x:xs) = ... interpaux y xs ... This one of the reasons nhc does this optimization, I'm sure. I know the Eager Haskell compiler avoids pushing and popping the invariant arguments from the stack during a tail call; I recall that hbc does so as well. -Jan-Willem Maessen Eager Haskell Project [EMAIL PROTECTED] _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell