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)的基础.