compare(obj1, obj2)
If obj1
is less than obj2
, return -1. If obj1
is greater than obj2
, returns 1.
If obj1
is equal to obj2
, returns 0.
For sequence objects like strings and lists, a lexicographical comparison is done.
First the first two items are compared, and if they differ this determines the outcome of the comparison; if they are equal,
the next two items are compared, and so on, until either sequence is exhausted. For strings, character comparison
is used, for lists and arrays compare
is called recursively for each element and for numeric arrays number comparison
operators are used.
Compare
is a generic function by default and can be overridden for custom data types without
an explicit declare generic
.
let s1 = "abcd"
let s2 = "xyz"
compare(s1, s2)
// -1
compare(s1, string_upcase(s2))
// 1
compare([1, 2, 3], [3, 2, 1])
// -1
compare([1, 2, 3], reverse([3, 2, 1]))
// 0
// implementing the comparison operators for a custom type:
record point(x, y)
let p1 = point(x = 10, y = 20)
let p2 = point(x = 20, y = 30)
p1 < p2
//> error: compare_not_supported
function pointc(p1)
^(msg)
| 'compare -> ^(p2) compare(point_x(p1), point_x(p2))
let pc1 = pointc(p1)
pc1 < p2
// true
pc1 > p2
// false