我想在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个节点,而不是一个节点。我很确定我缺少一些东西,但是没有足够的材料和与该结构相关的示例。
答案 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文档非常老,并且 已过期,但我不知道有较新的链接,因此最好 咨询来源。