【问题标题】:SML Value Restriction - HeapSML 值限制 - 堆
【发布时间】:2012-09-22 21:42:58
【问题描述】:

基本上,我想要一个函数从一个节点和 2 个子堆中创建一个堆。 heap表示如下(其中Cons中的int表示节点的rank)

datatype 'a heap = Empty | Heap of int * 'a * 'a heap *  'a heap

我的功能是:

fun makeHeap x h1 h2 = Heap ((rank h1)+1, x, h1, h2)

程序编译,但是当我调用 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

【问题讨论】:

    标签: functional-programming sml smlnj


    【解决方案1】:

    您已经以 curried 形式定义了 makeHeap,但使用元组参数调用它。这两种形式意味着不同的类型,因此不可互换。只需将调用更改为

    makeHeap #"c" Empty Empty
    

    或者,将定义更改为

    fun makeHeap(x, h1, h2) = ...
    

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2011-09-11
      • 2010-10-28
      • 2010-09-11
      • 1970-01-01
      相关资源
      最近更新 更多