Beispiel (aus: D. Hofstadter, GEB)
letrec { f = \ x -> if x == 0 then 1
else x - g(f(x-1))
, g = \ x -> if x == 0 then 0
else x - f(g(x-1))
} in f 15
Bastelaufgabe: für welche x gilt
f (x)≠g(x)?
AST-Knoten:
data Exp = ... | LetRec [(Name, Exp)] Exp
weitere Beispiele:
letrec { x = 3 + 4 , y = x * x } in x - y
letrec { f = \ x -> .. f (x-1) } in f 3