table of contents
Diffing_with_keys(3) | OCaml library | Diffing_with_keys(3) |
NAME¶
Diffing_with_keys - When diffing lists where each element has a distinct key, we can refine the diffing patch by introducing two composite edit moves: swaps and moves.
Module¶
Module Diffing_with_keys
Documentation¶
Module Diffing_with_keys
: sig end
When diffing lists where each element has a distinct key, we can refine the diffing patch by introducing two composite edit moves: swaps and moves.
Swap s exchange the position of two elements. Swap cost is set to 2 * change - epsilon . Move s change the position of one element. Move cost is set to delete + addition - epsilon .
When the cost delete + addition is greater than change and with those specific weights, the optimal patch with Swap s and Move s can be computed directly and cheaply from the original optimal patch.
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 ;
}
This specialized version of changes introduces two composite changes: Move and Swap
val prefix : Format.formatter -> ('l, 'r, 'diff) change -> unit
module Define : functor (D : sig end) -> sig end
2024-03-14 | OCamldoc |