我想在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);
输出:val it = T {cnt = 1,key = 2,left = E,right = E,value = 0}:int S.map
S.numItems(it);
输出:val it = 1:int
所以,我假设numItems的输出它创建了2个二进制映射,每个映射有1个节点,而不是一个。我很确定我错过了一些东西,但没有足够的材料和与该结构有关的例子。
要看的是insert函数的类型,以及BinaryMapFn符合的签名empty中的ORD_MAP。
val empty : 'a map
val insert : ('a map * Key.ord_key * 'a) -> 'a map
因此,insert接受一个(fromMap,key,x)并返回一个新的map,其中包含fromMap的元素,其中添加了x / key以及以某种方式处理的重复键。
要获得具有2个元素的映射,而不是在两个调用中都使用S.empty,您需要将第一个调用的返回值作为参数传递给第二个。
注意:值得注意的是,smlnj-lib文档非常陈旧,过时,但我不知道更新的链接,所以最好咨询源代码。