Mac CommonLISP 5.0の最小スタックオーバーフローサイズを増やす
-
27-09-2019 - |
質問
私はLISP(まさに基本を知っているだけです)を比較的初めてにしています。現在、David Copeが作成したアルゴリズム構成プログラムを実行しようとしています。 MCL 5.0で実行され、次のエラーが発生し続けます。
プロセスプレイのエラー:バリュースタックのスタックオーバーフロー。スタックスペースをグローバルに増やすために、増加します
*minimum-stack-overflow-size*
スタックオーバーフローサイズを増やすために使用する機能と、コンピューターに最適なスタックオーバーフローサイズをどのように計算するかを知っていますか? 512 MBのRAMを備えた古いPowerbookでMCLを実行しています。
御時間ありがとうございます、
エディ
解決
単に特別な変数を変更する必要があると言っているようです *minimum-stack-overflow-size*
. 。あなたがREPLにいるとき(CL-USER>
プロンプトまたは類似)、その名前を評価して、この変数を検査します。
CL-USER> *minimum-stack-overflow-size*
次に、それをより大きな値に設定します(1234567は単なるプレースホルダーです) setf
:
CL-USER> (setf *minimum-stack-overflow-size* 1234567)
ただし、これは本当の問題ではないかもしれません。私はMCLをよく知りませんが、それは必要かもしれません (declaim (optimize (speed 3) (safety 0)))
または、実行するプログラムがそのような最適化に依存するテール再帰関数を使用する場合、テールコールの排除を有効にすることと同様です。
他のヒント
当初のメモリオプションはReseditで編集されました。
また、保存アプリケーション関数を使用して、:メモリオプションキーワードを使用して、さまざまな値を指定することもできます。これは、MCLリファレンスマニュアルで説明されています。この関数は、新しいMCLアプリケーションを保存します。通常、バニラMCLを起動し、さまざまなオプションを設定し、一部のライブラリをロードしてから新しいアプリケーションを保存します。この新しいアプリケーションは、開発中に使用されます。
必要なスタックサイズは、実行するプログラムによって異なります。
スタックオーバーフローが発生した場合、MCLでは、多くの場合、より大きなスタックを続行できます。正しい再起動オプションを選択するだけです。