2

次のコードを実行すると:

(defun countdown (n)
  (if (>= n 0)
    (cons n (countdown (- n 1)))))

(countdown 100000)

次のメッセージが表示されます。

INFO: Control stack guard page unprotected
Control stack guard page temporarily disabled: proceed with caution

debugger invoked on a SB-KERNEL::CONTROL-STACK-EXHAUSTED in thread
#<THREAD "main thread" RUNNING {1002B03653}>:
  Control stack exhausted (no more space for function call frames).
This is probably due to heavily nested or infinitely recursive function
calls, or a tail call that SBCL cannot or has not optimized away.

PROCEED WITH CAUTION.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::CONTROL-STACK-EXHAUSTED-ERROR)

スタック領域を増やすにはどうすればよいですか? 上記のコードを変更したくありません。スタックの枯渇を説明するために純粋に提供しました。

4

1 に答える 1