Scheme is designed to make it easy to use higher-order procedures, i.e., procedures that may take other procedures as arguments or return them as values.
For example, you can easily write a sort procedure that takes a
comparison procedure as an argument, and uses whatever procedure you
hand it to determine the sorted order.
To sort a list in ascending order, you can then call sort with
(a pointer to) the procedure < ("less than") as its argument,
like this:
(sort < '(5 2 3))
and you'll get back a sorted list (2 3 5).
Note that the expression < here is just a variable reference.
We're fetching the value of the variable < and passing it to
sort as an argument.
If you'd rather sort the list in descending order, you can pass it the
procedure > ("greater than") instead:
(sort > '(5 2 3))
and get back a sorted list (5 3 2).
The same procedure can be used with lists of different kinds of objects, as long as you supply a comparison operator that does what you want.
For example, to sort a list of character strings into alphabetic order,
you can pass sort a pointer to the standard string-comparison
procedure string<?,
(sort string<? '("foo" "bar" "baz" "quux"))
and get back a list ("bar" "baz" "foo" "quux").
[ give map example here? ]