print-elements-of-list
¶print-elements-of-list 関数は、リストを用いた while ループを示しています。
この関数の出力には数行の記述が必要です。最近のGNU Emacsでこれを読んでいる場合は、通常通りInfo内で以下の式を評価できます。
旧バージョンのEmacsを使用している場合は、必要な式を*scratch*バッファにコピーし、そこで評価する必要があります。これは、旧バージョンではエコーエリアが1行しかなかったためです。
領域の先頭を C-SPC (set-mark-command) でマークし、カーソルを領域の末尾に移動させた後、M-w (kill-ring-save。これは copy-region-as-kill を呼び出し、視覚的なフィードバックを提供します)
を使って領域をコピーできます。*scratch* バッファでは、C-y (yank)
と入力することで、式をヤンクして戻すことができます。
式を*scratch*バッファにコピーしたら、各式を順に評価してください。最後の式(print-elements-of-list animals)については、必ずC-u C-x C-eと入力する、つまりeval-last-sexpに引数を渡すことで評価するようにしてください。これにより、評価結果がエコー領域ではなく、*scratch*バッファに出力されます。(そうしないと、エコー領域に^Jgazelle^J^Jgiraffe^J^Jlion^J^Jtiger^Jnilのような表示が現れます。ここで各‘^J’は改行を表します。)
これらの式はInfoバッファで直接評価でき、エコー領域が拡張されて結果が表示されます。
(setq animals '(gazelle giraffe lion tiger))
(defun print-elements-of-list (list)
"Print each element of LIST on a line of its own."
(while list
(print (car list))
(setq list (cdr list))))
(print-elements-of-list animals)
3つの式を順に評価すると、次のようになります。
gazelle giraffe lion tiger nil
リストの各要素は1行ずつ出力され(これが関数 print
の動作です)、その後に関数から返された値が出力されます。関数内の最後の式は while
ループであり、また while ループは常に nil を返すため、リストの最後の要素の後に nil
が出力されます。