遅延評価
遅延評価
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)
Haskell は遅延評価を基本的な評価戦略とする。ほとんどの言語では関数の呼び出しにおいて引数に与えられたすべての式を評価してから呼び出された関数に渡す先行評価を評価戦略とするが、これに対し Haskell ではあらゆる式はそれが必要になるまで評価されない。次の定数 answer は評価すると常に 42 を返すが、その定義には未定義の式を含む。 answer = const 42 (1 `div` 0) ここで、const は常に第1引数を返す定数関数である。また、`div` は整数の除算を行う演算子であり、1 `div` 0 は 1 / 0 に相当し、この値は未定義であり、この部分を評価すればエラーになる。正格評価をする言語でこのような式を評価しようとすると、ゼロ除算によるエラーになるであろう。しかし 上記の定数 answer を評価してもエラーにはならない。const は第1引数をつねに返すので第2引数を評価する必要はなく、第2引数に与えられた式 1 `div` 0 は無視されるので評価されないからである。遅延評価がデフォルトで行われることにより、不要な計算は省かれ、参照透過性により同じ式を複数回評価する必要もなくなるため、Haskell では最適化によって計算効率の向上が期待できる場合がある。ただし、頻繁に新たな値を計算する場合は正格評価のほうが効率がよく、必要に応じてseq関数やBangPatterns拡張による明示により正格評価もできる。
※この「遅延評価」の解説は、「Haskell」の解説の一部です。
「遅延評価」を含む「Haskell」の記事については、「Haskell」の概要を参照ください。
遅延評価
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/20 07:25 UTC 版)
詳細は「遅延評価」を参照 Haskellなどの遅延評価型関数言語に見られる形態で、値が実際に必要になるまで計算を行わない方法。概念上は、計算方法を遅延したthunkと呼ばれるオブジェクトが渡っていると考えられる。
※この「遅延評価」の解説は、「引数」の解説の一部です。
「遅延評価」を含む「引数」の記事については、「引数」の概要を参照ください。
遅延評価
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/08/21 22:21 UTC 版)
遅延評価は投機的ではない。投機的実行と言える先行評価(eager evaluation)をHaskellプログラミング言語の実装に導入することは最近の研究上の話題のひとつである。Eager Haskellはそのような試みとして生まれた言語である。Glasgow Haskell Compiler (GHC) の最近のバージョンでは、選択を間違った場合にやり直すアボート機能をそなえた一種の投機的実行をサポートしており、「楽観的評価」と呼ばれている。
※この「遅延評価」の解説は、「投機的実行」の解説の一部です。
「遅延評価」を含む「投機的実行」の記事については、「投機的実行」の概要を参照ください。
遅延評価と同じ種類の言葉
- 遅延評価のページへのリンク