Spec-Zone.ru › OCaml

Модуль типа MoreLabels.Map.S

module type S = sig .. end

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

Отображения

type key 

Тип ключей отображения.

type !+'a t 

Тип отображений из типа key в тип 'a.

val empty : 'a t

Пустое отображение.

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 add_to_list : key:key ->       data:'a -> 'a list t -> 'a list t

add_to_list ~key ~data m является m с key сопоставленным с l таким образом, что l является data :: Map.find key m если key было связано в m и [v] в противном случае.

  • С 5.1
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
val singleton : key -> 'a -> 'a t

singleton x y возвращает отображение с одним элементом, содержащее связь y для x.

  • С 3.12
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
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
val cardinal : 'a t -> int

Возвращает количество связей отображения.

  • С 3.12

Связи

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

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

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

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

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

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

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

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

  • С 3.12
val max_binding_opt : 'a t -> (key * 'a) option

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

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

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

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

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

  • С 4.05

Поиск

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 не существует.

  • С 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.

  • С 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 , если такого ключа не существует.

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

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

  • С 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 , если такого ключа не существует.

  • С 4.05

Перебор

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 -> 'acc -> 'acc) ->       'a t -> init:'acc -> 'acc

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

Преобразование

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 filter : f:(key -> 'a -> bool) ->       'a t -> 'a t

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

  • До 4.03 Физическое равенство не гарантировалось.
  • С 3.12
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
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
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.

  • С 3.12

Предикаты и сравнения

val is_empty : 'a t -> bool

Проверка, пусто ли отображение.

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

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

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

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

val compare : cmp:('a -> 'a -> int) ->       'a t -> 'a t -> int

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

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

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

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

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

  • С 3.12

Преобразования

val to_list : 'a t -> (key * 'a) list

to_list m это MoreLabels.Map.S.bindings m.

  • С 5.1
val of_list : (key * 'a) list -> 'a t

of_list bs добавляет связи bs в пустое отображение в порядке списка (если ключ связан дважды в bs, последнее значение берется).

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

Итерирование по всему отображению в порядке возрастания ключей

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

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

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

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

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

Добавление заданных связей в отображение в порядке.

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

Построение отображения из заданных связей

  • С 4.07

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/MoreLabels.Map.S.html

Spec-Zone.ru

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