Go backward to Recursive Definitions Go up to Top Go forward to Fixed Point Semantics |
E[[LETREC I = E1 IN E2]] = lambda e. E[[E2]]e'
where e' = updateenv [[I]] (E[[E1]]e')e
E[[LETREC I = E1 IN E2]] = lambda e. E[[E2]]
(fix(lambda e'. updateenv [[I]] (E[[E1]]e')e))
LETREC F =
LAMBDA (X)
IFNULL X THEN NIL
ELSE a0 CONS F(TAIL X)
IN F(a1 CONS a2 CONS NIL)
=> (a0 CONS a0 CONS NIL)