202310201710
Tags : Lambda Calculus, Programming Languages
letrec-expressions in Enriched lambda Calculus
The syntax of expressions is similar to expressions.
letrec v1 = E1
v2 = E2
...
vn = En
in
E
where v1
..vn
are variables and E
, E1
..En
are expressions in Enriched Lambda Calculus
the term letrec
is short for let recursively, it introduces the possibility to define variables recursive, the difference between let
and letrec
is that the scope of any v
is E
and all of the E1
..En
.
Example:
letrec fac = \n IF (= n 0)
1
(* n (fac (- n 1)))
in fac 4
Multi-line definitions are necessary for letrec
for example
letrec f = ... f ... g
g = ... f ...
in ...
Here nesting makes the inner definition out of scope for the outer one.
The semantics for single definition letrec
is given by the Y combinator.
we say
letrec v = B in E <=> let v = Y (\v.B) in E
References
Enriched Lambda Calculus let-expressions in Enriched Lambda Calculus