引数を取らないシグニチャで関数を宣言するにはどうすればよいですか?
私は次のような引数を持つ関数シグネチャを見ただけです:leq:item*item->bool
そして私は次のような関数のシグネチャを作成しようとしています:
initBTree = E (* where empty is of type tree *)
これは機能しません:val initBTree:->tree
引数を取らないシグニチャで関数を宣言するにはどうすればよいですか?
私は次のような引数を持つ関数シグネチャを見ただけです:leq:item*item->bool
そして私は次のような関数のシグネチャを作成しようとしています:
initBTree = E (* where empty is of type tree *)
これは機能しません:val initBTree:->tree
次のように、パラメータとして単位をとる関数を作成できます。
fun initBTree () = E
そしてそれをこのように呼んでください:
initBTree ()
タイプがあります
fn : unit -> tree
E
タイプがある場合tree
。
しかし、それはちょっと無意味です。と言うE
か、本当にinitBTreeと呼ばれるようにしたい場合は次のようにします。
val initBTree = E
ご存知かもしれませんが、SMLのすべての関数は正確に1つの引数を取ります。したがって、引数をとらない関数を作成することは不可能です。そのような「もの」は実際には単なる値であるためです。
あなたのコード
val initBTree : -> tree
まったく意味がありません。空のツリーである値コンストラクターがあると言う場合E
、ツリーを初期化しないinit関数を作成しないのはなぜですか?その場合initBTree
、の同義語にE
なり、あなたはすることができます
val initBTree = E
しかし、これはまだ無意味です。