基本上,我想要一个函数从一个节点和两个子堆创建一个堆。堆表示如下(其中Cons中的int表示节点的等级)
datatype 'a heap = Empty | Heap of int * 'a * 'a heap * 'a heap
我的功能是:
fun makeHeap x h1 h2 = Heap ((rank h1)+1, x, h1, h2)
程序comipiles但是当我调用makeHeap时,我得到一个奇怪的值而不是堆:
makeHeap(#"c", Empty, Empty);
stdIn:72.1-72.29 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val it = fn
: (char * ?.X1 heap * ?.X2 heap) heap
-> (char * ?.X1 heap * ?.X2 heap) heap
-> (char * ?.X1 heap * ?.X2 heap) heap
答案 0 :(得分:3)
您已经以咖喱形式定义了makeHeap
,但使用了tupled参数调用它。这两种形式意味着不同的类型,因此不可互换。只需将呼叫更改为
makeHeap #"c" Empty Empty
或者,将定义更改为
fun makeHeap(x, h1, h2) = ...