Я хочу создать заказанная карта с несколькими узлами в 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 это = 1: int
Итак, я предполагаю, что вывод numItems создает 2 двоичных карты с 1 узлом в каждой, а не одну. Я почти уверен, что что-то упускаю, но материала и примеров, связанных с этой структурой, недостаточно.
Следует обратить внимание на тип функции вставлять, а также пустой в сигнатуре ORD_MAP, которой соответствует BinaryMapFn.
val empty : 'a map
val insert : ('a map * Key.ord_key * 'a) -> 'a map
Таким образом, вставка принимает (fromMap, key, x) и возвращает новую карту, которая содержит элементы с карты с добавлением x/key, а также с дубликатами ключей, обработанными каким-то образом.
Чтобы получить карту с 2 элементами, а не использовать S.empty в обоих вызовах, нужно передать возвращаемое значение первого вызова в качестве параметра второму.
Примечание: Стоит отметить, что документация smlnj-lib очень старая, и устарела, но я не знаю более новой ссылки, поэтому лучше обратитесь к источнику.