1

コール スタックの深さが最大 ​​1000 の入力に対して機能する再帰関数がありますが、より大きな入力に対しては失敗します。関数を末尾再帰に変換したところ、約 1350 に到達できました。

制限とは何ですか? また、その制限を増やす方法はありますか?

私は純粋な関数で作業しており、操作を使用する必要がないようにしたいと考えています。問題をステップの構成に分割するソリューションがあります。各ステップのスタックの深さは小さくなりますが、その唯一の目的は問題を回避することであり、より複雑であるため、かなり不自然です。

4

4 に答える 4

1

Overture は、基礎となる Java スタック制限を超えるスタック制限を課さないため、単純に -Xms JVM 引数を尊重します。インタープリターの通常の実行スタックは、Overture.ini ファイル (最上位) にあると思います。ここには、最大ヒープを設定するための -Xmx 引数があります。(たとえば) -Xms128m または選択したサイズを追加してみて、それがさらに進むかどうかを確認できますか?

于 2016-02-15T09:32:21.907 に答える
0

-Xms と -Xmx の両方を 2048m まで設定してみましたが、影響はありませんでした。また、Mac OSX と Windows 10 の両方で Overture 2.3.0 を試してみましたが、結果は同じでした。

プロジェクトをループから外すために、1 つの非常に単純な関数を含む新しいプロジェクトを作成しました。

  countdown(n:nat) res:nat
  == if n=0 then n else countdown(n-1)

Windows と Mac の両方で、値 807 でこれを呼び出すことができ、成功しますが、808 ではエラーで失敗します。

internal error

Main 206: Error evaluating code
Detailed Message: internal error
于 2016-02-16T08:57:48.300 に答える