Lambda演算的基于模式的优化

Jam*_*ing 5 optimization computer-science functional-programming lambda-calculus

我正在用C#编写lambda演算的解释器。到目前为止,我已经采用了以下几种解释方法。

  1. 将术语编译为MSIL,这样仍然保留了惰性评估。
  2. 对术语树进行评估(术语重写)。

目前,在我能够测试的大多数情况下,MSIL编译策略的速度都快一个数量级。但是,我正在通过确定通常在LC术语构建中使用的模式来优化术语重写器。到目前为止,我特别提出了一种方法,该方法提供了相对较小的加速:识别指数级应用程序。例如f (f (f (f x)))简化为f^4 x。然后,使用相等于申请人指数的规则,即f^m (f^n x) = f^(m + n) x。该规则特别适用于教堂数字的取幂。

我想知道这种优化:LC中是否还有其他基于模式的优化方法?