「遅延評価」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「遅延評価とは、プログラミング言語において、式の評価を必要とする時点まで評価を遅延させる手法です。<syntaxhighlight lang=…」)
 
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
遅延評価とは、[[プログラミング言語]]において、式の評価を必要とする時点まで評価を遅延させる手法です。<syntaxhighlight lang="basic">
+
'''遅延評価'''(ちえんひょうか、lazy)とは、[[プログラミング言語]]において、式の評価を必要とする時点まで評価を遅延させる手法です。対義語は「[[正確評価]]」です。
x = 5 + 3  ; 遅延評価ではまだ実行されません。
 
PRINT x    ; このでx = 5 + 3が実行されます。
 
PRINT x + 1 ; ここでもx = 5 + 3が実行されます。
 
  
</syntaxhighlight>通常、プログラミング言語では、変数に値を代入するとすぐにその式が評価されます。
+
一般的に遅延評価は[[関数型プログラミング言語]]で使用されます。例えば[[Haskell]]では遅延評価が基本的な評価戦略として使用されます。また、[[JavaScript]]でも遅延評価を使用することができます。
  
しかし、遅延評価を使用すると、式の評価を必要とするまで遅らせることができます。これにより、プログラムの実行効率を向上させることができます。
+
== 概要 ==
 +
通常、[[プログラミング言語]]では、[[変数]]に値を代入するとすぐにその式が評価されます。
 +
<syntaxhighlight lang="basic">
 +
x = 5 + 3  ; 正確評価では5 + 3が実行されxに8が代入されます。
 +
PRINT x    ; 正確評価ではxの内容を表示するだけです。
 +
PRINT x    ; 正確評価ではxの内容を表示するだけです。
 +
</syntaxhighlight>
  
 +
しかし、遅延評価では式の評価を必要とするまで遅らせます。
 +
<syntaxhighlight lang="basic">
 +
x = 5 + 3  ; 遅延評価ではまだ実行されません。
 +
PRINT x    ; 遅延評価では5 + 3が実行され結果が表示されます。
 +
PRINT x    ; 遅延評価では5 + 3が再び実行され結果が表示されます。
 +
</syntaxhighlight>
  
遅延評価は、一般的に[[関数型プログラミング言語]]で使用されます。例えば、[[Haskell]]では遅延評価が基本的な評価戦略として使用されます。また、[[JavaScript]]でも遅延評価を使用することができます。
+
遅延評価は上記を見ての通り「x = 5 + 3」の計算が何度も発生して[[プログラム]]の実行効率は悪そうに見えますが、遅延評価を使用することで[[スタックオーバーフロー]]せずに「無限のリスト」などの無限のデータ構造を表現することも可能になります。なお[[メモリ]]は勢いよく消費します。
 
 
遅延評価を使用することで、無限のリストなどの無限のデータ構造を表現することも可能になります。ただし、遅延評価は、メモリ使用量が大きくなる可能性があるため、適切に使用する必要があります。
 

2023年3月15日 (水) 05:51時点における最新版

遅延評価(ちえんひょうか、lazy)とは、プログラミング言語において、式の評価を必要とする時点まで評価を遅延させる手法です。対義語は「正確評価」です。

一般的に遅延評価は関数型プログラミング言語で使用されます。例えばHaskellでは遅延評価が基本的な評価戦略として使用されます。また、JavaScriptでも遅延評価を使用することができます。

概要[編集 | ソースを編集]

通常、プログラミング言語では、変数に値を代入するとすぐにその式が評価されます。

x = 5 + 3   ; 正確評価では5 + 3が実行されxに8が代入されます
PRINT x     ; 正確評価ではxの内容を表示するだけです
PRINT x     ; 正確評価ではxの内容を表示するだけです

しかし、遅延評価では式の評価を必要とするまで遅らせます。

x = 5 + 3   ; 遅延評価ではまだ実行されません
PRINT x     ; 遅延評価では5 + 3が実行され結果が表示されます
PRINT x     ; 遅延評価では5 + 3が再び実行され結果が表示されます

遅延評価は上記を見ての通り「x = 5 + 3」の計算が何度も発生してプログラムの実行効率は悪そうに見えますが、遅延評価を使用することでスタックオーバーフローせずに「無限のリスト」などの無限のデータ構造を表現することも可能になります。なおメモリは勢いよく消費します。