Например, ECL и LispWorks могут расширить стек во время выполнения. Можно видеть, что оба также предлагают перезагружается, когда есть переполнение стека, чтобы увеличить размер стека, если это необходимо:
СТЭК:
> (defun s (n)
(if (zerop n) 0 (+ 1 (s (1- n)))))
S
> (s 100000)
Condition of type: STACK-OVERFLOW
C-STACK overflow at size 4259840. Stack can probably be resized.
Available restarts:
1. (CONTINUE) Extend stack size
2. (RESTART-TOPLEVEL) Go back to Top-Level REPL.
Broken at S. In: #<process TOP-LEVEL>.
>>
Смотрите документацию управления памятью ЭСЛ по адресу: http://ecls.sourceforge.net/new-manual/re86.html
LispWorks:
CL-USER 31 > (s 1000)
Stack overflow (stack size 15997).
1 (continue) Extend stack by 50%.
2 Extend stack by 300%.
3 (abort) Return to level 0.
4 Return to top loop level 0.
Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.
Переменная в LispWorks позволяет настроить: SYSTEM:*STACK-OVERFLOW-BEHAVIOUR*
. См. http://www.lispworks.com/documentation/lw61/LW/html/lw-1440.htm#marker-887330.
куча растет автоматически в большинстве реализаций, запрашивая больше памяти из операционной системы. Следующий вопрос тогда будет: может ли куча сжиматься?
Что вы намерены достичь с этим? Тот факт, что вы играете в стек динамически, немного нечетно – jozefg