compiler-construction - 内联后变量重复
问题描述
我正在做一些关于内联和 alpha 转换的自学,并且有一部分我在笔记上看不懂。
但是,由于内联表达式是函数体的副本,它们的变量可能会重复,因此必须再次进行 α 转换。
内联扩展后变量重复时,谁能给我一个例子,好吗?非常感谢你。
解决方案
让我们考虑以下程序。
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 转换。
推荐阅读
- css - 使用 flex 对齐 SVG
- amazon-web-services - 静态 S3 网站端点未通过 HTTPS 重定向
- php - Laravel For Each Loop in Has Many 只返回一条记录
- java - JavaFX Stage 总是显示空场景
- prolog - 合并两个有序列表 ProLog
- eclipse - Eclipse 远程应用程序调试不使用指定的登录 shell
- c++ - 错误:C2679 二进制“==”:未找到采用“const std::string”类型的右侧操作数的运算符(或没有可接受的转换
- r - 在目标函数中使用 rootsolver 的解
- python - 从文件读取输入时排除 \n
- python - 每次将模型保存在 Django 上时,如何为模型的属性设置特定值?