letrec

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



Johannes Waldmann 2012-01-30