リストと関数を取り、その中からBSTを作成する関数標準mlを作成したい。 'a list -> ('a * 'a -> bool) -> 'a tree
が、私はそれにいくつかの問題を抱えている、ここで私が書いたコードです:関数の型がある標準mlリストからbstを作成する
datatype 'data tree =
EMPTY
| NODE of 'data tree * 'data * "data tree;
fun makeBST [] f = EMPTY
| makeBST (x::xs) f =
let
fun insert EMPTY x = NODE(EMPTY, x, EMPTY)
| insert (NODE(left, root, right)) x =
if f(x, root) then
insert left x
else
insert right x
in
makeBST xs f
end;
私はこの関数で取得していますタイプがある:'a list -> ('b * 'c -> bool) -> 'd tree
、私はそれを呼び出すようにしようとすると、 、次makeBST [4, 3, 6, 7, 8, 2, 0, 1] (op <);
ように私は次のエラーを取得する:
stdIn:16.1-16.40 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val it = EMPTY : ?.X1 tree
コードが間違っていますか? おかげ
EDIT:私のコードの
セカンドバージョン:
fun makeBST [] f = EMPTY
| makeBST (x::xs) f =
let
val tree = EMPTY
fun insert EMPTY x = NODE (EMPTY, x, EMPTY)
| insert (NODE(left, root, right)) x =
if f(x, root) then
insert left x
else
insert right x
in
insert (makeBST xs f) x
end;
このコードは、私が欲しい種類を生産し、それが正しいのですか?
これはもちろんウェバーの近代的なプログラミング言語第11章から教科書の宿題の問題であり、運動11. –