Next: Another Bug, Previous: lambda, Up: Print Whole Graph [Contents][Index]
mapcar
Functionmapcar
is a function that calls its first argument with each element
of its second argument, in turn. The second argument must be a sequence.
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)
The function 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 apply
.)
In the definition of one-fiftieth
, the first argument is the
anonymous function:
(lambda (arg) (/ arg 50))
and the second argument is full-range
, which will be bound to
list-for-graph
.
The whole expression looks like this:
(mapcar (lambda (arg) (/ arg 50)) full-range))
See Mapping Functions in The GNU Emacs Lisp
Reference Manual, for more about mapcar
.
Using the one-fiftieth
function, we can generate a list in which each
element is one-fiftieth the size of the corresponding element in
list-for-graph
.
(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.)
Next: Another Bug, Previous: lambda, Up: Print Whole Graph [Contents][Index]