1

考えてみてください-fun A()呼び出しfun B()てその逆を行い、私はA()B()に次のように実装します:

fun A() = 
  B() ; 

fun B() =
  A() ; 

このような場合、SML/NJインタプリタはプロンプトを表示します-

 Error: unbound variable or c onstructor: B

どうすればこれを解決できますか?多分前方宣言のようなものですか?

(無限ループが発生するのでそのままにしておきます)

4

2 に答える 2

4

キーワードを使用して、and相互再帰関数を宣言できます。

fun A () = B ()
and B () = A ()

また、同じキーワードを使用して、相互再帰的なデータ型を作成します。

通常、関数名は最初の文字を小文字で記述します。

fun a () = b ()
and b () = a ()

これは、関数と値コンストラクターを区別するのに役立ちます。

于 2013-01-08T12:21:00.847 に答える
2

これにletバインディングを使用する必要はありません。トップレベルでも宣言できます。

fun a () = b ()    
and b () = a ()
于 2013-01-08T12:20:46.207 に答える