unfold/fold

A program transformation where a recursive call to a function is unfolded 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
(03 Nov 1994)