unfold/fold

from The Free On-line Dictionary of Computing (8 July 2008)
unfold/fold

   A {program transformation} where a {recursive} call to a
   function is {unfold}ed to an instance of the function's body
   and then later an instance of the function's body is replaced
   by a call.  E.g.

   	sumdouble l = sum (double l)

   	double l = case l of
   	           []   -> []
   		   x:xs -> 2*x + double xs

   	==> (unfold double)

   	sumdouble l = sum (case l of
   		           []   -> []
   			   x:xs -> 2*x : double xs)

   	==> (distribute over case)

   	sumdouble l = case l of
   		      []   -> sum []
   		      x:xs -> sum (2*x : double xs)

    	==> (unfold sum)

   	sumdouble l = case l of
   		      []   -> 0
   		      x:xs -> 2*x + sum (double xs)

    	==> (fold sumdouble)

   	sumdouble l = case l of
   		      []   -> 0
   		      x:xs -> 2*x + sumdouble xs

   (1994-11-03)
    

[email protected]