mirror of
https://github.com/ldmud/ldmud
synced 2026-08-12 14:26:05 -04:00
56 lines
2.4 KiB
Groff
56 lines
2.4 KiB
Groff
SYNOPSIS
|
|
varargs int difference(mixed a,mixed b,int max,
|
|
closure element_difference);
|
|
|
|
a, b
|
|
strings or arrays of mixed
|
|
max (optional, defaults to MAX_INT)
|
|
the maximal number of differences on which to abort
|
|
element_difference (optional, defaults to !(x == y) )
|
|
closure receiving two elements of a and b and returning
|
|
an int which states the difference between the two
|
|
elements
|
|
|
|
DESCRIPTION
|
|
The function returns the number of differences between the two
|
|
given values a and b. As a difference counts one of the
|
|
following:
|
|
- a different element (e.g. "blah", "bloh")
|
|
- a missing element (e.g. "blah", "blh")
|
|
- an extra element (e.g. "blah", "blaah")
|
|
- two swapped consecutive elements (e.g. "blah", "balh")
|
|
|
|
The optional third argument (max) states a maximal number of
|
|
differences up to which the algorithm shall search for the
|
|
solution; if the result would be greater than this given number
|
|
the search will be aborted and this value (max) is returned.
|
|
|
|
The optional fourth argument (element_difference) is a closure
|
|
which returns a difference for two single elements of a and b;
|
|
if defaults to 0 for equal and 1 for different elements; thus
|
|
it is possible to react nifty on typos by giving two chars which
|
|
are close together on a keyboard a smaller difference value than
|
|
two chars which are far apart.
|
|
|
|
EXAMPLE
|
|
difference("bla","bla")
|
|
/* returns 0 */
|
|
|
|
difference("bla","blo")
|
|
/* returns 1 (one different character) */
|
|
|
|
difference(({ 0,1,2,3 }),({ 0,1,3,7 }))
|
|
/* returns 2 (one pair swapped and one element wrong) */
|
|
|
|
difference("abcdefgh","stuvwxyz",5)
|
|
/* returns 5 (8 differences, but max is given as 5) */
|
|
|
|
difference(({ "abc","def","dext","jkl" }),
|
|
({ "abc","dext","def","jkl" }),
|
|
100,
|
|
(#'difference));
|
|
/* returns 1 (one word pair swapped is the least difference
|
|
while the comparison of "def" and "dext" would result 2
|
|
differences (one char different and one char missing), but
|
|
just the smallest possible amount of differences is returned
|
|
as result) */
|