% $Id: Iterate.oz,v 1.1 2007/10/22 05:43:51 leavens Exp leavens $ declare % compare to page 123 fun {Iterate IsDone Extract Transform S} if {IsDone S} then {Extract S} else {Iterate IsDone Extract Transform {Transform S}} end end % avoiding passing unchanging arguments fun {Iterate2 IsDone Extract Transform S} fun {Loop S} if {IsDone S} then {Extract S} else {Loop {Transform S}} end end in {Loop S} end % curried fun {Iterate2c IsDone Extract Transform} fun {Loop S} if {IsDone S} then {Extract S} else {Loop {Transform S}} end end in Loop end