理系学生日記

おまえはいつまで学生気分なのか

Emacs Lisp プログラミングの 5 章に入った

演習問題の難易度は 4 章とあまり変わってないような気がするなー.

省略できる引数に指定した数がfill-columnの値に比べて大きいか小さいかをメッセージに表示する対話的関数を書いてみよ。ただし、関数に引数を渡されなかった場合のデフォルトは56とする。

今一分からないのが interactive.(interactive "P") の後に prefix-numeric-value するのと,(interactive "p") を使うのは何が違うんだろう.

(defun compare-with-fill-column (&optional arg)
  (interactive "p")
  (let ((val (or arg 56)))
    (if (> arg fill-column)
        (message "bigger")
      (if (< arg fill-column)
          (message "smaller")
        (message "same")))))

or は短絡評価をしてくれるので,let と組合せるとデフォルト値の設定に使える.
Perl でいう

$val //= 30
# $val = 30 unless defined( $val )

と同じ.