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