The numeric comparison functions =, /=, <, <=, >, and >= can take more than two arguments. This is handy to e.g. check if several variables have monotonically increasing numeric value:

(< a b c d)

For numbers in a sufficiently short list, apply does the trick:

(apply #'< list)

Non-numeric comparison functions generally take exactly two objects to compare, so e.g. (string= x y z) is invalid, and for a list of three or more objects, you can’t just apply the function to the list.

However, you can work your way through the list and perform pairwise comparison with every. For example, to see if all the strings in a list are string=:

(every #'string= list (rest list))

Note that /= is special; the following calls are not equivalent:

* (apply #'/= list) T

* (every #'/= list (rest list)) T



Why?