module Diffing_with_keys:sig
..end
當比較列表中每個元素都有一個獨特鍵值時,我們可以透過引入兩個複合編輯動作來改進差異比較修補:交換 (swaps) 和移動 (moves)。
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: