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: