3

私は標準 ML を初めて使用し、SML/NJ ランタイム環境について理解しようとしています。私はそれを私のニーズに合わせたいと思っています。具体的には、次のことを行います。

  • デフォルトで IntInf を使用
  • 文字列と IntInf が 70 文字に切り捨てられないようにします。

8 時間以上かけてドキュメントを読み、実験してわかったことを次に示します。

コマンドを使用して、int の上に IntInf をオーバーロードできます

open IntInf;

変数 Control.Print.stringDepth を使用して、表示される文字列の文字数を制御できます。たとえば、これにより、切り捨てられる前に 1000 文字が表示されます。

Control.Print.stringDepth := 1000;

IntInf 値に対して同じことを行うにはどうすればよいですか? 深さを無限に設定することはできますか (つまり、切り捨てはまったくありません)?

IntInf を開くことは、IntInf で int をオーバーロードする最良の方法ですか?

最後に、実行時にこれをすべて自動的にロードして、「sml」を呼び出したときにデフォルト環境になるようにするにはどうすればよいですか?


編集: Control.Print.intinfDepth というオプションがあり、大きな数値 (999999 など) を設定できることがわかりました。ただし、無限にする方法はわかりません。

私の他の質問はまだ答えられていません。


編集: Kansas State のクラス向けに、この SML/NJ カスタマイズのセットに出くわしました。独自のバナー メッセージを表示し、「val it = true : bool」を表示しないようにするには、SMLofNJ.exportML の戻り値をテストする必要があります。そうであれば、ヒープ イメージが復元された (つまり、起動された) だけであり、メッセージを表示できます。false の場合、ヒープ イメージは保存されたばかりです。

4

2 に答える 2

3

実行時にこれをすべて自動的にロードして、「sml」を呼び出したときにデフォルト環境になるようにするにはどうすればよいですか?

スクリプトによって実行されるヒープイメージを作成する必要がありsmlます。これをシンボリックにリンクできます。ブートストラップの複雑さを避けるために、私は通常、ヒープイメージに別の名前を付けます。例えば; nowebsml-nwをサポートするSML/NJの場合。

ヒープイメージを作成するために必要な基本的なプリミティブはですSMLofNJ.exportML。使用方法は次のとおりです。

  1. たとえば、open IntInfすべての変数を設定するなどして、すべてを希望どおりに設定しますControl.Printthings to(無限大に最も近いControl.Print valOf Int.maxInt`を設定してみてください。)

  2. で新しいヒープイメージを作成しますSMLofNJ.exportML "mysml"。カスタマイズしたバージョンを開始すると、への呼び出しの直後に開始しますexportMLドキュメントを読ん でください。遊んでください。このプリミティブを使用する方法はたくさんあります。

  3. ヒープイメージ(多分mysml.x86-linux)をヒープイメージのインストールディレクトリにコピーします(私のインストールでは、ですが、スクリプトの手がかりを確実に/usr/lib/smlnj/bin/.heapたどることができます)sml

  4. mysmlスクリプトへのシンボリックリンクであるスクリプトを作成しsmlます。

昔はこれで十分でしたが、ここ数年はSML/NJを使っていません。また、Web上でやや時代遅れの例を見つけました。

于 2009-05-02T16:57:38.770 に答える