4


関数型言語で呼び出しサイトの置換が可能かどうかは疑問です。私はこれ
を怠惰の特別な形と考えています。

基本的に、引数 a を持つ関数 f をどこかで呼び出します。

... (f a) ...

次に、関数は
、引数 b を持つ関数 g でそれ自体を置き換えることができます。

... (g b) ...

そのため、次に (fa) の元の呼び出しサイト
が呼び出されると、実際には (gb) が呼び出されます。

ヒント歓迎。

さよなら

PS: Just-In-Time (JIT) コンパイル用です。
ポリモーフィックなインライン キャッシュなど。
例を参照してください。

動的に最適化 - 型付きオブジェクト -
ポリモーフィック インライン キャッシュを使用したオブジェクト指向言語

Urs Hölzle、Craig Chambers、David Ungar
ECOOP '91 Proceedings of the European
Conference on Object-Oriented Programming
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インスタンスを使用してそのような関数を作成できることです。非常に便利なアプリケーション インスタンスもあります。

補足: これは、Arrowized Functional Reactive Programming (AFRP) の基礎です。

于 2012-10-22T18:30:16.240 に答える
1

Haskell では、RULES プラグマを介してカスタムの最適化の書き換えを提供できます。
詳細については、GHC ユーザー ガイド > 書き換えルールを参照してください。

于 2012-10-22T22:10:43.963 に答える