評価戦略
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/21 14:08 UTC 版)
非決定性の戦略
部分適用
部分適用はどちらかというとカリー化や第一級関数と関連する。複数の引数を取る関数において、一部の引数だけ適用された関数を得ることである。これに対して、すべての引数を適用することを完全適用と呼ぶ。 例として、Haskellのような関数型言語で、与えられた数値を2倍する関数を部分適用で作ると
multiply x y = x * y
twice x = multiply x 2
となる。部分適用されているのはtwiceを定義している'multiply x 2'の部分である。multiply関数は本来なら
multiply 2 3
のようにして使用するものであるが、これに2だけ適用して新たな関数twiceを得るのが部分適用である。 部分適用の重要性はモジュール性を高めることである。奇数・偶数の判定といった単純なものから、高階関数を駆使した複雑なものまで作り出すことができる。とくに遅延評価の言語で利用するとその効果は大きい。一方で、関数に副作用があると、思いもよらない結果をもたらすかもしれない。
完全β-簡約
完全β-簡約(full β-reduction)においては、任意の時点で任意の関数適用が簡約される(関数の引数を捕獲回避置換を使った関数に置換する)。これは、適用されない関数の本体内でも行われる。
未来呼び
未来呼び(call by future)あるいは並列名前呼び(parallel call by name)は必要呼びに似ているが、関数の引数は(必要に応じてではなく)関数本体と並行して(別スレッドで)評価される。関数本体で引数を使用するときにスレッドの同期が行われる。引数が全く使われない場合、引数の評価をしているスレッドは中断され捨てられる。
楽観的評価
楽観的評価(Optimistic Evaluation)は必要呼びの変形の1つであり、関数の引数はある回数だけ部分評価される(回数は実行時に調整される)。そして、評価は中断され、必要呼びで関数が適用される。この方法では必要呼びの性能低下を防ぎつつ、停止属性を保持する。
- ^ a b 訳は、計算機プログラムの構造と解釈より
- ^ CLU Reference Manual
- ^ 値渡しと参照渡しの違いを理解する
- ^ CLU Reference Manual (1974), p. 14-15.
固有名詞の分類
- 評価戦略のページへのリンク