首页 > 解决方案 > 内联后变量重复

问题描述

我正在做一些关于内联和 alpha 转换的自学,并且有一部分我在笔记上看不懂。

但是,由于内联表达式是函数体的副本,它们的变量可能会重复,因此必须再次进行 α 转换。

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

标签: compiler-constructionocamlinline

解决方案


让我们考虑以下程序。

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 转换。


推荐阅读