Go backward to Correspondence Go up to Top Go forward to Variable Definitions |
D[[proc I1(I2) = C]] = lambda e.lambda s.
((updateenv [[I1]]
inProc(lambda d. C[[C]]
(updateenv
[[I2]] inD(d) e)) e),
(return s))
C[[I(M)]] = lambda e.lambda s.
cases (accessenv [[I]] e) of
...
[] isProc(q) -> (q (...M[[M]] ...) s)
end
D[[define I=M]] = lambda e. lambda s.
((updateenv [[I]] inD(...M[[M]] ...)
e),
(return s))
C[[begin proc I(I') = C; I(M) end]] =
C[[begin define I' = M; C end]]
(provided that [[M]] and [[C]] do not contain free occurences of [[I]])