Lambda表达式中的替换定义

时间:2013-10-13 19:25:29

标签: types lambda theory lambda-calculus

让我们将[x |-> v] t表示为“用v替换t中所有x的自由出现”。

我教科书的替换规则是

[x |-> v] x=v
[x |-> v] y=y (where y is not x)

[x |-> v] (function x -> t) = (function x -> t)
[x |-> v] (function y -> t) (where y is not x) =
        (function y -> [x |-> v]t)

[x |-> v] (t1 t2) ->  ([x |-> v]t1   [x |-> v]t2)

我不太了解前两条规则。 为什么y是x会产生影响? [x |-> v] x中的第一个x和第二个x是否相同?第二条规则的y可以是1+x吗? 你能在Lambda表达式或C / C ++ / C#/ Java中分别使用这两个规则吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

第一条规则是将x映射到v。第二条规则是说任何非x变量保持不变。这两者都是完全定义其行为所必需的相同规则的一部分。

我想一个有点合理的例子如下:

int x = 1337;
int y = 9001;
int v;
v = x;

请注意,v现已设置为x(第一条规则)的值,但y的值未更改(第二条规则)。