在SML中使用二进制映射数据结构的问题

时间:2019-04-06 09:44:44

标签: sml smlnj

我想在SML中创建具有多个节点的有序地图。我到目前为止发现的所有内容都存在于https://www.smlnj.org/doc/smlnj-lib/Manual/binary-map-fn.html中。所以,我正在尝试这样的事情:

structure S = BinaryMapFn(struct
    type ord_key = int
    val compare = Int.compare
  end);

然后,我尝试插入例如2个节点,分别具有值0和键值1和2:

S.insert(S.empty,1,0);
S.insert(S.empty,2,0);

output:val it = T {cnt = 1,key = 2,left = E,right = E,value = 0}:int S.map

S.numItems(it);

output:val it = 1:int

因此,我假设通过numItems的输出来创建2个二进制映射,每个映射都有1个节点,而不是一个节点。我很确定我缺少一些东西,但是没有足够的材料和与该结构相关的示例。

1 个答案:

答案 0 :(得分:2)

要查看的是insert函数的类型以及BinaryMapFn所遵循的签名empty中的ORD_MAP

val empty : 'a map 
val insert : ('a map * Key.ord_key * 'a) -> 'a map 

因此,insert需要一个(fromMap,key,x)并返回一个新地图,其中包含 fromMap 的元素,其中添加了x / key以及以某种方式处理的重复键。

>

要获取包含2个元素的地图,而不是在两个调用中都使用S.empty,则需要将第一个调用的返回值作为参数传递给第二个调用。

注释:值得注意的是smlnj-lib文档非常老,并且    已过期,但我不知道有较新的链接,因此最好    咨询来源。