Модуль 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 :
| |
data :
|
} val with_pos : 'a list -> 'a with_pos list
type ('l, 'r, 'diff) mismatch =
|
| Name of
| ||||||||
|
| Type of
|
type ('l, 'r, 'diff) change =
|
| Change of
| ||||||
|
| Swap of
| ||||||
|
| Move of
| ||||||
|
| Insert of
| ||||||
|
| Delete of
|
Этот специализированный вариант изменений вводит два составных изменения: 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