スタックとヒープで何が起こっているのかを理解しようとしているプログラムが 3 つあります。すべてが無限ループ
1.
(let ((f (lambda () 'ok))
(g (lambda (a b) (a a b))))
(g g f))
すべてのアプリケーションは末尾再帰です。スタックは問題ありません。2 つのラムダのみが作成されるため、ヒープは問題ありません。私は正しいですか?
2.
(let ((f (lambda (a b)
(a a (lambda () 'ok)))))
(f f (lambda () 'ok)))
すべてのアプリケーションは末尾再帰です。スタックは問題ありません。ヒープについて: 無限のラムダ (lambda() 'ok)) が作成されます。私は正しいですか?-では、なぜメモリが終了しないのですか?
そして最後:
3.
(let ((f (lambda (a b)
(a a (lambda () (b))))))
(f f (lambda () 'ok)))
2と3の違いは何ですか?なぜ2でメモリが終了したのですか? 私が正しくない場合、1回のループの後に3回:
we activate this: (lambda (a b) (a a (lambda () (b)))
on (lambda (a b) (a a (lambda () (b)))
and this (lambda () 'ok) (becuse this is (b)..)
これは 2 と同じです。