Песочница

Правильные хвостовые вызовы и рекурсия

Хвостовое применение заменяет текущий кадр явного трамплина, поэтому собственная и взаимная хвостовая рекурсия не увеличивает логическое продолжение.

Кратко

LISPEX
(let loop ((n 10000) (acc 0)) (if (= n 0) acc (loop (- n 1) (+ acc 1))))

Результат

OUTPUT
10000

Текущие гарантии

  • Хвостовые позиции включают последние тела, обе ветви if, нормализованные cond/case, последние and/or, do, call-with-values и apply.
  • Правильный хвостовой вызов относится к росту продолжения, а не к одинаковому времени или неограниченному выполнению.
  • Даже для хвостовой рекурсии действуют детерминированные профильные пределы ресурсов.

Границы

  • Нехвостовая рекурсия может достичь объявленного предела ресурсов.
  • Чистая ошибка ресурса не доказывает равенство порогов native и WASM.