1

私はMLを初めて使用し、特別な事前定義されたデータ型を受け取り、そのコンポーネントではなく、引数のデータ型全体を参照できる関数を持っています。

これは愚かな例です:

datatype frame = Frame of string list * string list 

(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame = 
  fn (string(var), Frame(variables, values)) =>     
    ... 
    Frame(variables, values) 
    ... ;

1)指定されたフレームを返したい。別のものを作成する必要がありFrameますか?

2)指定されたフレームを別の関数に渡したいのですが、新しいものFrame(variables, values)を再度提供する必要がありますか?

私はこのような何かを書くことができたらいいのにと思います:

val lookup_variable_value_in_frame = 
     fn (string(var), frame : Frame(variables, values)) =>  ... 

そうすれば、フレームまたはそのコンポーネントを使用できるようになります。

ありがとうございました。

4

1 に答える 1

2

データ型にはすでに名前があります。これはframeです。frame別の関数に戻ったり、別の関数に渡したりするために、別の関数を作成する必要はありません。最初のオプションは、明示的な型アノテーションを使用することです。

(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame = 
  fn (var: string, f: frame) =>     
    ... 
    f 
    ... ;

このオプションは一般的ではありません。タイプチェッカーによって推測されるよりも一般的でないタイプが必要な場合にのみ使用する必要があります。別のオプションは、asキーワードを使用して値に別のバインディングを作成することです。

val lookup_variable_value_in_frame = 
     fn (var, f as Frame(variables, values)) =>  
         ...(* using f, variables or values here *)

string(var)SMLには、明示的な型注釈を使用するvar場合でも、明示的な型注釈を使用する場合でも、そのようなものはないことに注意してくださいvar: string

于 2011-06-01T07:30:48.953 に答える