mapcar 関数 ¶mapcar
は、第2引数の各要素を順に第1引数に渡して呼び出す関数です。第2引数はシーケンスである必要があります。
名称の「map」の部分は、数学的な表現である「領域上の写像」に由来しており、これは領域内の各要素に関数を適用することを意味します。この数学的な表現は、測量士が写像対象の区域を一歩ずつ歩いていくという比喩に基づいています。そして「car」は、言うまでもなく、リストの先頭というLispの概念に由来しています。
例えば、
(mapcar '1+ '(2 4 6))
⇒ (3 5 7)
引数に1を加える関数 1+ がリストの各要素に対して実行され、新しいリストが返されます。
これに対し、applyは第1引数を残りのすべての引数に適用します。(applyの解説については、グラフの準備を参照してください。)
one-fiftieth の定義において、第1引数は無名関数です:
(lambda (arg) (/ arg 50))
また、第2引数は full-range であり、これは list-for-graph にバインドされます。
式全体は次のようになります。
(mapcar (lambda (arg) (/ arg 50)) full-range))
mapcarの詳細については、The GNU Emacs
Lisp Reference ManualのMapping
Functionsを参照してください。
one-fiftieth関数を使えば、各要素がlist-for-graphの対応する要素の50分の1の大きさとなるリストを生成できます。
(setq fiftieth-list-for-graph
(one-fiftieth list-for-graph))
得られたリストは次のようになります。
(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)
さて、いよいよ印刷の準備が整いました!(また、情報の欠落にも気づきました。上位の範囲の多くが0となっており、これはその語数や記号数に達したdefunsが50件未満であったことを意味します――とはいえ、必ずしも一件もそのような語数や記号数に達したものがなかったとは限りません。)