10.20 Generic Sorting—library(samsort)

This library module provides generic sorting. Exported predicates:

samsort(+RawList, -Sorted)
is given a proper list RawList and unifies Sorted with a list having exactly the same elements as RawList but in ascending order according to the standard order on terms.
merge(+List1, +List2, -Merged)
is true when Merged is the stable merge of the two given lists. If the two lists are not ordered, the merge doesn't mean a great deal. Merging is perfectly well defined when the inputs contain duplicates, and all copies of an element are preserved in the output, e.g. merge("122357", "34568", "12233455678").
samsort(:Order, +RawList, -SortedList)
is given a proper list RawList and a binary predicate Order (note that it may be an N-ary predicate with the first N-2 arguments already filled in) and unifies SortedList with a sorted version of RawList. This is only supposed to work when Orderis transitive.
merge(:Order, +List1, +List2, -Merged)
is like merge/3 except that it takes an Order predicate as its first arguments, like all the generalised ordering routines.
samkeysort(+RawList, -Sorted)
is given a proper list RawList of Key-Value pairs, and unifies Sorted with a list having exactly the same elements as RawList but in ascending order according to the standard order on the keys. samkeysort/2 is stable in the sense that the relative position of elements with the same key is maintained.
keymerge(+List1, +List2, -Merged)
is like merge/3 except that it compares only the keys of its input lists. Note that it will not work properly when Merged is already instantiated.

Send feedback on this subject.