让我们将[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中分别使用这两个规则吗?
非常感谢!
答案 0 :(得分:1)
第一条规则是将x
映射到v
。第二条规则是说任何非x
变量保持不变。这两者都是完全定义其行为所必需的相同规则的一部分。
我想一个有点合理的例子如下:
int x = 1337;
int y = 9001;
int v;
v = x;
请注意,v
现已设置为x
(第一条规则)的值,但y
的值未更改(第二条规则)。