\ Solving Alan Kay's odds-evens problem without mutual recursion. See "Early \ History of Smalltalk". Block Define (run f) (LIST.for_each (f [Right "one" & "two" & "three" & "four" & "five" & 'nil]) STDIO.print_line) In Begin (run odds_evens1) (STDIO.print_line "") (run odds_evens2) End Where Define (odds_evens1 items) Define (select mode items) Unfold {mode items} Match items | 'nil 'nil | 'cons.{item items} Match mode | 'odds [item & (Fold 'evens items)] | 'evens (Fold 'odds items) ; ; In (LIST.append (select 'odds items) (select 'evens items)) Define (odds_evens2 items) Let {odds evens} Define (o item {odds evens}) {[item & odds] evens} Define (e item {odds evens}) {odds [item & evens]} In Unfold {here there items} From {o e items} Match items | 'nil {'nil 'nil} | 'cons.{item items} (here item (Fold there here items)) ; In (LIST.append odds evens) Where Let LIST Package "list" Let STDIO Package "stdio"