内联后变量重复

Duplication of variables after inlining

我正在自学inlining和alpha conversion,笔记上有部分看不懂。

However, since inlined expressions are copies of function bodies, their variables may be duplicated and therefore must be α-converted again.

谁能给我一个内联扩展后变量重复的例子吗?非常感谢。

让我们考虑以下程序。

let f x =
  let a = 42 in
  x + a

let () =
  let p = f 1 in
  let q = f 2 in
  print_int (p + q)

如果你f内联,那么上面的程序会被转换成下面的样子。

let () =
  let p =
    let a = 42 in
    1 + a
  in
  let q =
    let a = 42 in
    2 + a
  in
  print_int (p + q)

然后有两个名为a的变量。因此,如果您希望每个变量都有一个单独的名称,则需要进行 alpha 转换。