有 3 个程序我试图了解堆栈和堆中发生了什么。都是无限循环
1.
(let ((f (lambda () 'ok))
(g (lambda (a b) (a a b))))
(g g f))
所有应用程序都是尾递归 - 堆栈是好的。只创建了 2 个 lambda - 所以堆没问题。我对吗?
2.
(let ((f (lambda (a b)
(a a (lambda () 'ok)))))
(f f (lambda () 'ok)))
所有的应用程序都是尾递归 - 堆栈是好的。关于堆:创建了无限的 lambda (lambda () 'ok))。我对吗?- 那么为什么内存没有被终止呢?
最后一个:
3.
(let ((f (lambda (a b)
(a a (lambda () (b))))))
(f f (lambda () 'ok)))
2和3有什么区别?为什么在 2 内存终止?如果我underdatnd正确,在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一样!