mapcar is a function that calls its first argument with each
element of its second argument, in turn. The second argument must be
The ‘map’ part of the name comes from the mathematical phrase, “mapping over a domain”, meaning to apply a function to each of the elements in a domain. The mathematical phrase is based on the metaphor of a surveyor walking, one step at a time, over an area he is mapping. And ‘car’, of course, comes from the Lisp notion of the first of a list.
(mapcar '1+ '(2 4 6)) ⇒ (3 5 7)
1+ which adds one to its argument, is executed on
each element of the list, and a new list is returned.
Contrast this with
apply, which applies its first argument to
all the remaining.
(See Readying a Graph, for an explanation of
In the definition of
one-fiftieth, the first argument is the
(lambda (arg) (/ arg 50))
and the second argument is
full-range, which will be bound to
The whole expression looks like this:
(mapcar (lambda (arg) (/ arg 50)) full-range))
See Mapping Functions, for more about
one-fiftieth function, we can generate a list in
which each element is one-fiftieth the size of the corresponding
(setq fiftieth-list-for-graph (one-fiftieth list-for-graph))
The resulting list looks like this:
(10 20 19 15 11 9 6 5 4 3 3 2 2 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 4)
This, we are almost ready to print! (We also notice the loss of information: many of the higher ranges are 0, meaning that fewer than 50 defuns had that many words or symbols—but not necessarily meaning that none had that many words or symbols.)