39 lines
1.3 KiB
Factor
39 lines
1.3 KiB
Factor
! Copyright (C) 2009 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: help.markup help.syntax kernel math.order quotations
|
|
sequences strings ;
|
|
IN: sorting.human
|
|
|
|
HELP: find-numbers
|
|
{ $values
|
|
{ "string" string }
|
|
{ "seq" sequence }
|
|
}
|
|
{ $description "Splits a string on numbers and returns a sequence of sequences and integers." } ;
|
|
|
|
HELP: human<=>
|
|
{ $values
|
|
{ "obj1" object } { "obj2" object }
|
|
{ "<=>" "an ordering specifier" }
|
|
}
|
|
{ $description "Compares two objects after converting numbers in the string into integers." } ;
|
|
|
|
HELP: human>=<
|
|
{ $values
|
|
{ "obj1" object } { "obj2" object }
|
|
{ ">=<" "an ordering specifier" }
|
|
}
|
|
{ $description "Compares two objects using the " { $link human<=> } " word and inverts the result." } ;
|
|
|
|
ARTICLE: "sorting.human" "Human-friendly sorting"
|
|
"The " { $vocab-link "sorting.human" } " vocabulary sorts by numbers as a human would -- by comparing their magnitudes -- rather than in a lexicographic way. For example, sorting a1, a10, a03, a2 with human sort returns a1, a2, a03, a10, while sorting with natural sort returns a03, a1, a10, a2." $nl
|
|
"Comparing two objects:"
|
|
{ $subsections
|
|
human<=>
|
|
human>=<
|
|
}
|
|
"Splitting a string into substrings and integers:"
|
|
{ $subsections find-numbers } ;
|
|
|
|
ABOUT: "sorting.human"
|