3

私のmlプログラムでは、ネストされた構造を使用してコードを構造化しています。これらの構造の署名を定義していますが、署名をネストすることはできません。

例:

structure Example =
struct
  structure Code = 
  struct
    datatype mytype = Mycons of string
  end
end

このために私はこのようなことをしたいと思います:

signature EXAMPLE = 
sig
  signature CODE = (* or stucture Code - doesn't matter *)
  sig
    datatype mytype
  end
end

現在、これは機能しません。構文エラーが発生します。私の質問:

  1. これは悪い考えですか?もしそうなら、なぜですか?
  2. どうすればいいのですか?ネストされた署名をネストされた構造に適用するにはどうすればよいですか?
4

1 に答える 1

4

ネストされた構造を持つ場合の署名の構文には、ある程度の慣れが必要です。

署名内の構造が次のようになっている場合、署名を指定しようとすると

signature JSON =
sig    
  type t

  .. some signature stuff

  structure Converter : sig    
    type json
    type 'a t

    ... Converter specification stuff
    ... using type json as the parent signatures type t    
  end where type json = t    
end

この簡単な例については、これらのHoffman [ .sml ] [ .sig ]ファイルを参照してください。もう少し複雑な例については、Tree[ .sig ]ファイルを参照してください。

構造内で署名の仕様に言及する必要があることを忘れないでください。そうしないと、そもそも署名を作成しても意味がありません。

于 2011-03-10T05:15:25.300 に答える