SICPのストリーム 2 ビデオで、Abelson はアナログ コンピューターを使用して微分方程式を解く例を示しています。次に、これをSchemeでプログラムし、遅延評価を使用して循環定義依存を回避します。
この手法の問題点は、より複雑なプログラムを設計すると、どこでも式が遅れてしまい、理解が困難になることだと彼は言います。問題をエレガントに解決するには、表現力をいくらか犠牲にして、言語全体を遅延させる必要があります。つまり、尻尾を引きずる問題です。
これはMirandaとHaskellが取ったアプローチです。Haskell では、Big Oの複雑さを理解するのは難しく、メモリと時間を大量に消費するプログラムを簡単に作成できることがわかりました。
私はかつてこの問題についてRobert Harperと話しましたが、彼は、言語をエレガントにするには言語全体を遅延させる必要があり、これは Haskell の設計上の欠陥であることに同意しませんでした。この問題を解決するために言語を部分的に遅延させるには、具体的にどのようにすればよいでしょうか? そのような言語の例はありますか? 関数型言語についてもっと学びたいのですが、I/O を含むすべての場所で副作用と熱心な評価を禁止すると、物事が少し… 直感に反します。