1

私は比較的 Lisp に慣れていません (基本的なことは知っているだけです)。現在、David Cope によって作成されたアルゴリズム構成プログラムを実行しようとしています。MCL 5.0 で実行され、次のエラーが発生し続けます。

プロセス プレイのエラー: 値スタックのスタック オーバーフロー。スタック スペースをグローバルに増やすには、*minimum-stack-overflow-size*

スタック オーバーフロー サイズを大きくするためにどの関数を使用するか、およびコンピューターに最適なスタック オーバーフロー サイズを計算する方法を知っている人はいますか? 512 MB の RAM を搭載した古い Powerbook で MCL を実行しています。

御時間ありがとうございます、

エディ

4

2 に答える 2

1

もともとメモリオプションはResEditで編集されていました。

SAVE-APPLICATION関数を使用し、:MEMORY-OPTIONSキーワードを使用してさまざまな値を指定することもできます。これは、MCLリファレンスマニュアルで説明されています。この関数は、新しいMCLアプリケーションを保存します。通常、バニラMCLを起動し、さまざまなオプションを設定し、いくつかのライブラリをロードしてから、新しいアプリケーションを保存します。この新しいアプリケーションは、開発中に使用されます。

必要なスタックサイズは、実行するプログラムによって異なります。

スタックオーバーフローが発生した場合、MCLでは、多くの場合、より大きなスタックを続行できます。適切な再起動オプションを選択するだけです。

于 2010-10-03T15:06:28.743 に答える
0

単に特殊変数を変更する必要があると言っているようです*minimum-stack-overflow-size*。REPL (CL-USER>プロンプトなど) にいるときは、名前を評価してこの変数を調べます。

CL-USER> *minimum-stack-overflow-size*

次に、より大きな値に設定します (1234567 は単なるプレースホルダーです) setf

CL-USER> (setf *minimum-stack-overflow-size* 1234567)

ただし、これは実際の問題ではない可能性があります。(declaim (optimize (speed 3) (safety 0)))私は MCL をよく知りませんが、実行したいプログラムがそのような最適化に依存する末尾再帰関数を使用している場合、末尾呼び出しの除去を有効にする必要があるか、同様のことが必要かもしれません。

于 2010-10-03T11:56:34.033 に答える