Rekursion (bzw. Schleifen) mittels Label/Jump
(und ohne Rec oder Fixpunkt-Kombinator)
folgende Beispiele sind aus Turbak/Gifford, DCPL, 9.4.2
ex4.hs
)
let { d = \ f -> \ x -> f (f x) } in let { f = label l ( \ x -> jump l x ) } in f d ( \ x -> x + 1 ) 0
jump (label x x) (label y y)
undefined
,
so daß f x = x!
(Datei ex5.hs
)
let { triple x y z = \ s -> s x y z ; fst t = t ( \ x y z -> x ) ; snd t = t ( \ x y z -> y ) ; thd t = t ( \ x y z -> z ) ; f x = let { p = label start undefined ; loop = fst p ; n = snd p ; a = thd p } in if 0 == n then a else loop (triple loop (n - 1) (n * a)) } in f 5