怠惰な作業とキャッシュがどのように機能しているかを理解するのに非常に苦労しています。
ここでは、lazy-seq が機能している段階的な例が本当に役立つと思います。たとえば、次の質問を読みました。
しかし、それはまだ明らかではありません。
私の質問は、別の呼び出しがキャッシュされた呼び出しと「等しい」かどうかを呼び出しがどのように判断し、キャッシュにどれくらいの期間留まるかということです。(source lazy-seq)しようとしましたが、明らかにそれは Java の土地にあるため、ここでは運が悪いです。
引数を 1 つだけ取る単純なレイジー seq (2 の累乗のリストなど) を 5 と 8 で呼び出すとどうなるでしょうか? この 2 つの値だけがキャッシュされますか?
そして、すでに遅延関数を呼び出したすべての入力をキャッシュしてメモリを台無しにする場合、無限の構造を取得するために無限リストを作成してキャッシュするポイントは何ですか?
後続のすべての呼び出しで結果をキャッシュしていると言っているため...「s」を使用します。
1: 引数の結果が '1' キャッシュされます 2: 引数の結果が '2' キャッシュされます 3: 引数の結果が '3' キャッシュされます ... 2 30: 2 30まで数えました。すべて、しかし今ではメモリ内に 2**30 のキャッシュがあり、後続のすべての呼び出しのために以前のすべての呼び出しをキャッシュしています。
それとも、キャッシュされたのは最後の呼び出しですか?
木を引数として取る遅延関数を書いたらどうなるでしょうか? それは等しく実行されますか?新しい評価が必要かどうかを知るために渡された引数について?
この動作は、実行時に何らかの形で追跡できますか?