obj1 is less than
obj2, return -1. If
obj1 is greater than
obj2, returns 1.
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
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
Core Module Index | Contents