4

我只是想知道是否可以用函数
式语言进行呼叫站点替换。我认为这
是一种特殊的懒惰形式。

基本上我会在某个地方调用一个带有参数 a 的函数 f:

... (f a) ...

然后,该函数将设法
用带有参数 b 的函数 g 替换自己:

... (g b) ...

这样下一次调用(fa)的原始调用站点时
,实际上调用了(gb)。

欢迎提示。

再见

PS:它用于即时(JIT)编译。
多态内联缓存等。
参见例如:


使用多态内联缓存优化动态 - 类型化对象 - 面向

语言 Urs Hölzle、Craig Chambers、David Ungar
ECOOP '91 欧洲
面向对象编程会议论文集
http://selflanguage.org/_static/published/pics.pdf

4

2 回答 2

12

这基本上是自动机箭头:

newtype Auto a b = Auto (a -> (b, Auto a b))

在 Haskell 中,函数不可能替换自身,但自动机箭头表示函数返回自身的新版本以及结果:

switcher :: Bool -> Auto Bool Bool
switcher x =
    Auto $ \y ->
        (x, switcher $ if y then not x else x)

自动机箭头的有用之处在于它是一个箭头,因此Category实例允许您组合此类函数。还有一个非常有用的应用实例。

旁注:这是箭头函数响应式编程(AFRP)的基础。

于 2012-10-22T18:30:16.240 回答
1

在 Haskell 中,您可以通过 RULES pragma 提供自定义优化重写。
有关详细信息,请参阅GHC 用户指南 > 重写规则

于 2012-10-22T22:10:43.963 回答