목록 및 기능을 사용하고 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
코드에 어떤 문제가 있습니까? 감사
편집 : 내 코드의
두 번째 버전 :
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 –