1

SML でコマンドが実行された後、コマンドから返されたデータと型を持つ "it" が返されます。例えば:

false;  
val it = false : bool

次のようなプログラムにバインディングがあるとしましょう。

 val argsToOutput = (map (fn (Absyn.var_exp(n)) => 
                               (lookupReference env n)) exps)

「argsToOutput」の値とデータ型を(プログラムの途中で)「it」が出力される方法と同様の方法で出力する方法はありますか?

4

3 に答える 3

2

あなたがすることができます:

 val argsToOutput = (map (fn (Absyn.var_exp(n)) => 
                               (lookupReference env n)) exps)
 ...
 in
   (print (argsToOutput); 2 )
 end

2 の代わりに、let 本体の値があります。おそらく、print は argsToOutput に対して barf を実行しますが、予想されるタイプが文字列である場所で見つかったタイプを提供します。

データ型の値を出力する必要が生じたとき、データ型を取得して文字列に変換する tostring() 関数を作成しました。ネストされたデータ型がいくつかあったため、多少の作業が必要でしたが、その型のすべての変数で機能したため、後で非常に価値がありました.

于 2009-05-01T02:14:54.093 に答える
1

「argsToOutput」の値とデータ型を出力する方法はありますか(プログラムの途中で)

いいえ。コンパイラはコンパイルフェーズから型を保持するため、トップレベルで機能します。関数本体から引き出された任意の式では機能しません。しかし、運が良ければ、その値が関数に依存しない式を作成できる場合は、それを引き出してvalトップレベルでバインディングを記述し、必要なものを取得できます。

- val thing = hd [1, 2, 3];
val thing = 1 : int

これは、関心のあるいくつかのケースをカバーしているため、慰めにはなりません。

他のFAQへの回答を検索することをお勧めします。

  1. MLプログラムでタイプチェックを行うにはどうすればよいですか?
  2. よく型付けされたMLプログラムの部分式の型をどのように確認できますか?
  3. MLプログラムで、デバッグ用の値を出力するにはどうすればよいですか?

(答えは醜いです。)

于 2009-05-02T17:05:37.580 に答える