elispでprintデバッグ

こんな関数を定義してみるのはどうだろう.

;;; printデバッグ用関数
(defun p (FORMAT-STRING &rest ARGS)
  (prog1
      (apply 'message FORMAT-STRING ARGS)
    (sit-for 3)))

;;; 例
(setq num 10)
(p "num: %d" num)                       ; => "num: 10"
(message "num: %d" num)                 ; => "num: 10"

message関数と使い方は同じ.messageと違って表示後に一時停止するので,関数の途中に挟んでも変数の値を見る時間がある.

一文字の関数で入力しやすいというのも利点.もちろんRubyのパクり.グローバルなelispでこんな名前の関数を定義するのは危険すぎる気もするが…….