Previous: , Up: Interactive   [Contents][Index]


3.3.1 An Interactive multiply-by-seven

スペシャルフォームinteractive、それからmultiply-by-sevenのインタラクティブなバージョンにおけるmessage関数の使い方を見てみましょう。以下のような関数定義でした:

(defun multiply-by-seven (number)       ; Interactive version.
  "Multiply NUMBER by seven."
  (interactive "p")
  (message "The result is %d" (* 7 number)))

この関数において式(interactive "p")は2つの要素をもつリストです。"p"はプレフィックス引数をこの関数に渡すこと、そしてその値を関数への引数として使用することをEmacsに伝えます。

この引数は数値です。これは以下の行内にある数値がシンボルnumberにバインドされることを意味しています:

(message "The result is %d" (* 7 number))

たとえばプレフィックス引数を5にしたら、Lispインタープリターはこの行を以下よう評価するでしょう:

(message "The result is %d" (* 7 5))

(これをGNU Emacsで読んでいれば、この式をあなた自身で評価できます。) インタープリターはまず内側のリスト(* 7 5)を評価します。これは35をリターンします。次に外側のリストを評価するために、リストの2番目以降の要素の値を関数messageに渡すのです。

ここまで見てきたように、messageはEmacs Lispにおいてユーザーに1行メッセージを送信するために特化してデザインされた関数です(The message functionを参照)。要約するとmessage関数は1つ目の引数の‘%d’と‘%s’の箇所を除いた部分をエコーエリアにプリントします(ここでは記載していないその他の%シーケンスも除外される)。この関数は%による制御シーケンスを発見すると2つ目以降の引数を調べて、その引数の値を文字列内で制御シーケンスが配置された箇所にプリントするのです。

インタラクティブなmultiply-by-seven関数における制御文字列は数値を要求する‘%d’であり、その値は(* 7 5)を評価してリターンされた数値である35です。その結果として‘%d’の箇所に35がプリントされてメッセージは‘The result is 35’になります。

(あなたがmultiply-by-seven関数を呼び出すとメッセージは引用符なしでプリントされますが、messageを呼び出した際には二重引用符でクォートされたテキストがプリントされることに注意してください。1つ目の要素がmessageであるような式を評価した際にはmessageがリターンした値がエコーエリアに表示されますが、関数に埋め込まれた場合には副作用としてmessageが引用符なしでプリントを行いためです。)

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.