Модуль 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 : ('l, 'r, 'diff) change Format_doc.printer module Define: functor (D : Diffing.Defs with type eq := unit) -> sig .. end
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/compilerlibref/Diffing_with_keys.html