Проблема с использованием структуры данных двоичной карты в SML - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу создать упорядоченную карту с несколькими узлами в 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 узлом на каждой, а не с одной. Я почти уверен, что что-то упустил, но недостаточно материала и примеров, связанных с этой структурой.

1 Ответ

2 голосов
/ 06 апреля 2019

Следует обратить внимание на тип функции insert , а также empty в сигнатуре ORD_MAP , которой соответствует BinaryMapFn.

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

Итак, insert берет (fromMap, key, x) и возвращает новую карту, которая содержит элементы изMap с добавленным x / key, а также с дублирующимися ключами, обрабатываемыми некоторым образом.

Чтобы получить карту с 2 элементами, вместо использования S.empty в обоих вызовах, необходимо передать возвращаемое значение первого вызова в качестве параметра второму.

note : Стоит отметить, что документация smlnj-lib очень старая и устарела, но я не знаю о новой ссылке, поэтому лучше обратиться к источнику.

...