Ex4.1 formatの問題2

PAIPも4章に入るといよいよAIの内容に入ります。

4章ではExerciseは章末にまとまっています。

Ex4.1は章中で定義した、デバッグ用の表示関数dbgを formatディレクティブだけで表現してみようというモノです。

章中の定義は以下のように行ってました。

(defvar *dbg-ids* nil "Identifiers used by dbg")
(defun dbg (id format-string &rest args)
  "Print debugging info if (DEBIG ID) has been specified."
  (when (member id *dbg-ids*)
    (fresh-line *debug-io*)
    (apply #'format *debug-io* format-string args)))

formatは先日苦労したおかげか、マニュアルを見ながらなんとか分かるようになりました。
未だに@と:の使い分けに悩みますが。

;; Exercise 4.1[m] It is possible to implement dbg using a single call to format. 
;; Can you figure out the format directives to do this?
(defun dbg (id format-string &rest args)
  "Print debugging info if (DEBIG ID) has been specified."
  (format *debug-io* "~:[~;~&~?~]" (member id *dbg-ids*) format-string args))