遅延評価単語

チエンヒョウカ
1.5千文字の記事
  • 4
  • 0pt
掲示板へ

遅延評価とは、式を必要になるまで計算しないことである。

概要

プログラミングにおいて式は出てきた時点で計算されることが多いが、それをあえて実際に必要になるまで計算しないでおくことを遅延評価という。英語ではLazy Evaluation、怠け者なのである。反対は正格評価(Eager Evaluation)、実行中のソースコード上に現れた時点で計算を行う方式である。

大半のプログラミング言語での処理原則は正格評価である。

要件

遅延評価を実現するためには、計算に必要な値が実際に評価されるまでに変化しない、すなわち参照透過であることがめられる。計算に用いる値が実際に計算するまでに変更されることがあれば、当然計算結果も違ったものになるからである。

計算に用いる値が、計算が必要になった時に適切な値に変化するように設計されていれば、参照透過性は必要ないのかもしれないが、言仕様でそのような適切性を確保するのはほぼ不可能なので、現実には遅延評価の実装部分には必ず参照透過性がめられる。

利点

通常、関数引数関数に渡されるときに計算されるが、遅延評価では関数に渡した後、実際に計算が必要になるまで評価されない。

無限リストがこの利点を説明するためによく引き合いに出される。無限リストを評価するということは、無限リストの「全ての」要素を計算するということであるが、これは当然無限個の処理が終わるはずはないのでエラーになる。しかし、遅延評価における無限リストは、定義時や引数として関数に渡されたりした時もエラーにならず、関数内で請された時に必要最低限の要素の値を返して特に問題なく動作する。

正格評価しか行えない環境では、考えうる限りで最長の長さのリストを予め作成して無限リストの代用をするという考え方もあるが、その場合、要素の大半は使用されずに棄されることになりパフォーマンス上の問題を生じる。遅延評価はそういったは受けないので、パフォーマンス上有利であるというがある。

欠点

計算を的とするプログラムでは原則としてCPUフル稼働するので上記は利点と言えるが、ユーザーからの応答を待つプログラムのように何らかの待ち時間のあるプログラムだと、応答を待ってから計算を始めるのではかえって計算が遅くなることもある。

論理演算実装との類似点(短絡評価)

遅延評価とは厳密には異なるかもしれないが、非関数型プログラミングでも論理演算には似たような機構が備わっている。

A or B のような論理演算では A がであれば、B の偽にかかわらず結果がであることは確定するので、B の偽は評価しないプログラミング言語が多い。たとえば A が「C はぬるぽである」という内容であったとすると、B に C がぬるぽであるとエラーが出るような式が書いてあっても B が計算されるのは C がぬるぽでない時に限られるので問題が起きないのである。

論理学上は A or B と B or A は等価であるはずだが、B or A であったら C がぬるぽのときはエラーになる。

このように処理の一部をショートカットして値を返す評価方法を短絡評価(short-circuit evaluation)といい、他には if文(または if式)や条件演算子でも行われる。短絡評価の対となる項(A or B の B)が黙示的に引数なしのラムダ式になっていると考えれば一種の遅延評価と捉えることも出来る。

関連動画

必要になったらうpされると思います。

関連商品

必要になったら発売されると思います

関連コミュニティ

必要になったら作られてメンバーを募集すると思います。

関連項目

【スポンサーリンク】

  • 4
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

本格的男尻祭 (単) 記事と一緒に動画もおすすめ!
提供: noob_309
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

遅延評価

1 ななしのよっしん
2018/07/19(木) 20:32:37 ID: LTSdZJ9joi
関連が遅延評価されててわろた
👍
高評価
0
👎
低評価
0