遅延評価


評価戦略の記事を読んで遅延評価の仕組みがよく分かった。「最左最外簡約」という用語は分かりやすい。しかし、call-by-name(名前呼び)やcall-by-need(必要呼び)はPythonでもイテレータなど工夫をすれば、ある程度実現可能だが、こういう仕組みがあれば初心者でも間違いがない。


例えば、call-by-need(つまり2度同じ評価するところを1回で済ませる)の工夫があれば、計算量がO(2^n)になってしまうところが、O(n^2)になる例がCTMCPに載っていた。やはり関数型の機能を言語仕様に取り入れることは必須になりつつあると思う。工夫すればできるというのは、工夫する分だけ汎用化が損なわれる可能性があるということで、あまり良くない。工夫すればできると言うのであれば、C言語オブジェクト指向関数型言語の機能も何でもできるというのと同じで、なるべく工夫しないでできる方が良い。


しかし、Pythonオブジェクト指向で、そういう見せたくない部分を隠蔽して、ある程度汎用的なコードを作成することも可能だと思うが、やはり限界があるのだと思う。