Схема - бесконечный цикл и память - PullRequest
3 голосов
/ 04 января 2012

У меня есть функция:

((lambda (x) (x x))
 (lambda (x) (x x)))

и он производит бесконечный цикл. Мой вопрос о карте памяти. Мы знаем, что стек переполнится, потому что я открываю новый фрейм при каждом вызове. Но что будет в куче? Насколько я понял, при каждом вызове в куче будет создаваться новое замыкание, но я не уверен в этом.

1 Ответ

5 голосов
/ 04 января 2012

Стек не будет переполнен, потому что Схема требует Оптимизация хвостового вызова (или что-то эквивалентное ему).Новые кадры вызова не создаются.Кроме того, для выполнения этой функции требуется только постоянное выделение кучи;интерпретатору нужно вычислить только два lambda выражения, создавая два замыкания.

Если вы хотите заполнить память, сделайте что-то вроде

(let loop ((l 0))
  (loop (cons l l)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...