Spec-Zone.ru › OCaml 5.0

Тип модуля MoreLabels.Map.S

module type S = sig .. end

Подпись вывода функтора MoreLabels.Map.Make.

type key 

Тип ключей карты.

type +'a t 

Тип карт из типа key в тип 'a.

val empty : 'a t

Пустая карта.

val is_empty : 'a t -> bool

Проверка, пустая ли карта.

val mem : key -> 'a t -> bool

mem x m возвращает true, если m содержит привязку для x, и false в противном случае.

val add : key:key ->       data:'a -> 'a t -> 'a t

add ~key ~data m возвращает карту, содержащую те же привязки, что и m, плюс привязку key к data. Если key уже была привязана в m к значению, физически равному data, возвращается m без изменений (результат функции затем физически равен m). В противном случае предыдущая привязка key в m исчезает.

  • До 4.03 Физическое равенство не гарантировалось.
val update : key:key ->       f:('a option -> 'a option) -> 'a t -> 'a t

update ~key ~f m возвращает карту, содержащую те же привязки, что и m, за исключением привязки key. В зависимости от значения y, где y есть f (find_opt key m), привязка key добавляется, удаляется или обновляется. Если y есть None, привязка удаляется, если она существует; в противном случае, если y есть Some z, то key ассоциируется с z в результирующей карте. Если key уже была привязана в m к значению, физически равному z, возвращается m без изменений (результат функции тогда физически равен m).

  • С 4.06.0
val singleton : key -> 'a -> 'a t

singleton x y возвращает карту из одного элемента, содержащую привязку y для x.

  • С 3.12.0
val remove : key -> 'a t -> 'a t

remove x m возвращает карту, содержащую те же привязки, что и m, за исключением x, которое не привязано в возвращаемой карте. Если x не было в m, возвращается m без изменений (результат функции тогда физически равен m).

  • До 4.03 Физическое равенство не гарантировалось.
val merge : f:(key -> 'a option -> 'b option -> 'c option) ->       'a t -> 'b t -> 'c t

merge ~f m1 m2 вычисляет карту, ключи которой являются подмножеством ключей m1 и m2 . Наличие каждой такой привязки и соответствующее значение определяется функцией f . В терминах операции find_opt, у нас есть find_opt x (merge f m1 m2) = f x (find_opt x m1) (find_opt x m2) для любого ключа x, при условии, что f x None None = None.

  • С 3.12.0
val union : f:(key -> 'a -> 'a -> 'a option) ->       'a t -> 'a t -> 'a t

union ~f m1 m2 вычисляет карту, ключи которой являются подмножеством ключей m1 и m2 . Когда та же привязка определена в обоих аргументах, функция f используется для их объединения. Это частный случай merge: union f m1 m2 эквивалентно merge f' m1 m2, где

  • f' _key None None = None
  • f' _key (Some v) None = Some v
  • f' _key None (Some v) = Some v
  • f' key (Some v1) (Some v2) = f key v1 v2
  • С 4.03.0
val compare : cmp:('a -> 'a -> int) ->       'a t -> 'a t -> int

Полный порядок между картами. Первый аргумент — это полная упорядоченность, используемая для сравнения данных, связанных с одинаковыми ключами в двух картах.

val equal : cmp:('a -> 'a -> bool) ->       'a t -> 'a t -> bool

equal ~cmp m1 m2 проверяет, равны ли карты m1 и m2, то есть содержат ли они равные ключи и ассоциируют их с равными данными. cmp — это предикат равенства, используемый для сравнения данных, связанных с ключами.

val iter : f:(key:key -> data:'a -> unit) ->       'a t -> unit

iter ~f m применяет f ко всем привязанностям в карте m . f получает ключ в качестве первого аргумента, а связанное значение — в качестве второго. Привязки передаются f в возрастающем порядке относительно упорядочения над типом ключей.

val fold : f:(key:key -> data:'a -> 'b -> 'b) ->       'a t -> init:'b -> 'b

fold ~f m ~init вычисляет (f kN dN ... (f k1 d1 init)...), где k1 ... kN — ключи всех привязок в m (в возрастающем порядке), а d1 ... dN — связанные данные.

val for_all : f:(key -> 'a -> bool) -> 'a t -> bool

for_all ~f m проверяет, удовлетворяют ли все привязки карты предикату f.

  • С 3.12.0
val exists : f:(key -> 'a -> bool) -> 'a t -> bool

exists ~f m проверяет, удовлетворяет ли хотя бы одна привязка карты предикату f.

  • С 3.12.0
val filter : f:(key -> 'a -> bool) ->       'a t -> 'a t

filter ~f m возвращает карту со всеми привязками в m , которые удовлетворяют предикату p . Если каждая привязка в m удовлетворяет f, возвращается m без изменений (результат функции тогда физически равен m)

  • До 4.03 Физическое равенство не гарантировалось.
  • С 3.12.0
val filter_map : f:(key -> 'a -> 'b option) ->       'a t -> 'b t

filter_map ~f m применяет функцию f к каждой привязке m, и строит карту из результатов. Для каждой привязки (k, v) в входной карте:

  • если f k v есть None, то k не находится в результате,
  • если f k v есть Some v', то привязка (k, v') находится в выходной карте.

Например, следующая функция над картами, значениями которых являются списки

          filter_map
            (fun _k li -> match li with [] -> None | _::tl -> Some tl)
            m
          

удаляет все привязки m , значение которых является пустым списком, и извлекает первый элемент каждого значения, которое не пусто.

  • С 4.11.0
val partition : f:(key -> 'a -> bool) ->       'a t -> 'a t * 'a t

partition ~f m возвращает пару карт (m1, m2), где m1 содержит все привязки m , которые удовлетворяют предикату f, а m2 — карта со всеми привязками m , которые не удовлетворяют f.

  • С 3.12.0
val cardinal : 'a t -> int

Возвращает количество привязок карты.

  • С 3.12.0
val bindings : 'a t -> (key * 'a) list

Возвращает список всех привязок данной карты. Возвращаемый список отсортирован в возрастающем порядке ключей относительно порядка Ord.compare, где Ord — аргумент, переданный MoreLabels.Map.Make.

  • С 3.12.0
val min_binding : 'a t -> key * 'a

Возвращает привязку с наименьшим ключом в данной карте (относительно порядка Ord.compare ), или вызывает Not_found , если карта пуста.

  • С 3.12.0
val min_binding_opt : 'a t -> (key * 'a) option

То же, что MoreLabels.Map.S.min_binding, но возвращает привязку с наибольшим ключом в данной карте.

  • С 4.05
val max_binding : 'a t -> key * 'a

Аналогично MoreLabels.Map.S.min_binding_opt, но возвращает привязку с наибольшим ключом в данной карте.

  • С 4.05
val choose : 'a t -> key * 'a

Возвращает одну привязку данной карты или вызывает Not_found , если карта пуста. Какой привязке будет отдано предпочтение не определено, но равные привязки будут выбраны для равных карт.

  • С 3.12.0
val choose_opt : 'a t -> (key * 'a) option

Возвращает одну привязку данной карты или None , если карта пуста. Какой привязке будет отдано предпочтение не определено, но равные привязки будут выбраны для равных карт.

  • С 4.05
val split : key ->       'a t ->       'a t * 'a option * 'a t

split x m возвращает тройку (l, data, r), где l — это карта со всеми связываниями m, у которых ключ строго меньше x; r — это карта со всеми связываниями m, у которых ключ строго больше x; data — это None, если m не содержит связывания для x, или Some v, если m связывает v с x.

  • Since 3.12.0
val find : key -> 'a t -> 'a

find x m возвращает текущее значение x в m, или вызывает Not_found, если связывание для x не существует.

val find_opt : key -> 'a t -> 'a option

find_opt x m возвращает Some v, если текущее значение x в m равно v, или None, если связывание для x не существует.

  • Since 4.05
val find_first : f:(key -> bool) ->       'a t -> key * 'a

find_first ~f m, где f — монотонно возрастающая функция, возвращает связывание m с наименьшим ключом k таким, что f k, или вызывает Not_found, если такого ключа не существует.

Например, find_first (fun k -> Ord.compare k x >= 0) m вернёт первое связывание k, v для m, где Ord.compare k x >= 0 (интуитивно: k >= x), или вызовет Not_found, если x больше любого элемента в m.

  • Since 4.05
val find_first_opt : f:(key -> bool) ->       'a t -> (key * 'a) option

find_first_opt ~f m, где f — монотонно возрастающая функция, возвращает необязательное значение, содержащее связывание m с наименьшим ключом k таким, что f k, или None если такого ключа не существует.

  • Since 4.05
val find_last : f:(key -> bool) ->       'a t -> key * 'a

find_last ~f m, где f — монотонно убывающая функция, возвращает связывание m с наибольшим ключом k таким, что f k, или вызывает Not_found если такого ключа не существует.

  • Since 4.05
val find_last_opt : f:(key -> bool) ->       'a t -> (key * 'a) option

find_last_opt ~f m, где f — монотонно убывающая функция, возвращает необязательное значение, содержащее связывание m с наибольшим ключом k таким, что f k, или None если такого ключа не существует.

  • Since 4.05
val map : f:('a -> 'b) -> 'a t -> 'b t

map ~f m возвращает карту с тем же областью, что и m, где связанное значение a всех связываний m было заменено результатом применения f к a. Связывания передаются f в возрастающем порядке относительно упорядочения по типу ключей.

val mapi : f:(key -> 'a -> 'b) ->       'a t -> 'b t

То же, что и MoreLabels.Map.S.map, но функция получает в качестве аргументов как ключ, так и связанное значение для каждого связывания в карте.

Карты и Последовательности

val to_seq : 'a t -> (key * 'a) Seq.t

Пройтись по всей карте в порядке возрастания ключей

  • Since 4.07
val to_rev_seq : 'a t -> (key * 'a) Seq.t

Пройтись по всей карте в порядке убывания ключей

  • Since 4.12
val to_seq_from : key ->       'a t -> (key * 'a) Seq.t

to_seq_from k m проходит по подмножеству связываний m, в порядке возрастания ключей, начиная с ключа k или выше.

  • Since 4.07
val add_seq : (key * 'a) Seq.t ->       'a t -> 'a t

Добавить заданные связывания в карту в порядке.

  • Since 4.07
val of_seq : (key * 'a) Seq.t -> 'a t

Построить карту из заданных связываний

  • Since 4.07

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/MoreLabels.Map.S.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API