Edited at

関数型言語には遅延評価が必要

More than 3 years have passed since last update.

そんなものは迷信に過ぎない*1


Elm is not lazy.

Elm FAQ

It is compiled, with eager evaluation.

Idris Overview


参照透過性を持たない言語では、評価戦略を変更すると、大きな混乱がおこる。具体的には、HaskellでunsafePerformIOを使ったような状況に陥るだろう。(本物のプログラマはHaskellを使う 第31回 禁断の機能「unsafePerformIO」の深淵) しかし、参照透過性があるからといって評価戦略に遅延評価を採用しなければならないという決まりはない。

Haskellは逆に遅延評価に依存しているところがあるので、一般にHaskellで書かれたプログラムを遅延評価以外の戦略で評価することはできない。

Haskellと同様、Prologも宣言型だと喧伝されることが多いのだけれども、副作用を使った処理を常用する点ではHaskell以上に非宣言的記述を必要とする。

難しいというのは、コンパイラーなどが勝手に評価戦略を変更するのが難しいということ。

こういった話は、評価戦略を変更することでプログラムの意味がどのように変わりうるのかという話なので、意味論を持ち出さないとまともな話はできそうにない。

*1 破壊的メソッド名には!をつけなければならない