函数式编程语言中的呼叫站点代码替换

Tra*_*ers 4 haskell functional-programming

我只是想知道在功能
语言中是否有可能进行呼叫站点替换.我认为这
是一种特殊的懒惰形式.

基本上我会用函数f调用某个函数f:

... (f a) ...
Run Code Online (Sandbox Code Playgroud)

然后,该函数将设法
通过带有参数b的函数g 替换自身:

... (g b) ...
Run Code Online (Sandbox Code Playgroud)

这样下一次调用(fa)的原始调用站点
实际上(gb)被调用.

提示欢迎.

再见

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


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

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

小智 13

这基本上是自动机箭头:

newtype Auto a b = Auto (a -> (b, Auto a b))
Run Code Online (Sandbox Code Playgroud)

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

switcher :: Bool -> Auto Bool Bool
switcher x =
    Auto $ \y ->
        (x, switcher $ if y then not x else x)
Run Code Online (Sandbox Code Playgroud)

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

附注:这是箭头化功能反应式编程(AFRP)的基础.