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

Last updated: 1994-11-03

Nearby terms:

undocumented featureU-NET Limitedunfoldunfold/foldUNIunicastUnicode

Try this search on Wikipedia, OneLook, Google


Loading