让我们表示[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 和第二个 x[x |-> v] x
相同吗?第二条规则的 y 可以是类似的东西1+x
吗?你能在 Lambda 表达式或 C/C++/C#/Java 中给出两个分别使用这两个规则的例子吗?
非常感谢!