unfold/fold

unfold/fold

A program transformation where a recursive call to afunction is unfolded to an instance of the function's bodyand then later an instance of the function's body is replacedby 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[] -> 0x:xs -> 2*x + sum (double xs)

==> (fold sumdouble)

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