在论文Fixing Letrec: A Faithful Yet Efficient Implementation of Scheme's Recursive Binding Construct by Dybvig 等人。据说(强调我的):
这些问题的理论解决方案是进行限制
letrec
,使其左侧未分配,右侧为lambda
表达式。我们将这种形式letrec
称为 asfix
,因为它相当于定点运算符的广义形式。编译器可以fix
有效地处理表达式,并且不会letrec
违反fix
. 不幸的是,letrec
以这种方式进行限制不是实现者的选择,并且在任何情况下都会降低构造的通用性和便利性。
我没有仔细检查 R5RS 报告,但是我在 Scheme 程序中使用letrec
了等效的“命名let
”,并且我不清楚论文中提到的不幸后果,有人可以启发我吗?