Spec-Zone.ru › OCaml

Модуль Diffing_with_keys

module Diffing_with_keys: sig .. end

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

Swap меняют положение двух элементов. Swap стоимость устанавливается в 2 * change - epsilon. Move меняют положение одного элемента. Move стоимость устанавливается в delete + addition - epsilon.

Когда стоимость delete + addition больше, чем change и с этими конкретными весами, оптимальное исправление с Swap и Move может быть вычислено непосредственно и быстро из исходного оптимального исправления.

type 'a with_pos = {
pos : int;
data : 'a;
}
val with_pos : 'a list -> 'a with_pos list
type ('l, 'r, 'diff) mismatch = 
| Name of {
pos : int;
got : string;
expected : string;
types_match : bool;
}
| Type of {
pos : int;
got : 'l;
expected : 'r;
reason : 'diff;
}
type ('l, 'r, 'diff) change = 
| Change of ('l, 'r, 'diff) mismatch
| Swap of {
pos : int * int;
first : string;
last : string;
}
| Move of {
name : string;
got : int;
expected : int;
}
| Insert of {
pos : int;
insert : 'r;
}
| Delete of {
pos : int;
delete : 'l;
}

Этот специализированный вариант изменений вводит два составных изменения: Move и Swap

val prefix : Format.formatter -> ('l, 'r, 'diff) change -> unit
module Define: functor (D : Diffing.Defs  with type eq := unit) -> sig .. end

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/compilerlibref/Diffing_with_keys.html

Spec-Zone.ru

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