Condition System #2 error とかの引数
${XYZZY}/lisp/handler.l 参照。error, warn, signal 全部共通。
A. error CONDITION
コンディション・オブジェクト(make-condition で作る奴)を渡すと、そのまま投げる。
B. error CONDITION-TYPE &rest ARGS
CONDITION-TYPE のコンディション・オブジェクトを作って投げる。ARGS はそのコンディションのスロットをキーワード引数の形で。
(error 'some-condition :slot value) == (error (make-condition 'some-condition :slot value))
C. error FMT-CTRL &rest ARGS
simple-error(warn だと simple-warning、signal だと simple-condition)というコンディションを作って投げる。FMT-CTRL と ARGS は format で使うアレ。コンディションとしては :format-string*1 に FMT-CTRL を、:format-arguments に ARGS を持つ。
(error "~S が ~S で ~S" foo bar baz) == (error 'simple-error :format-string "~S が ~S で ~S" :format-arguments (list foo bar baz)) == (error (make-condition 'simple-error :format-string "~S が ~S で ~S" :format-arguments (list foo bar baz)))
いずれにしろ結局はコンディション・オブジェクトを(作って)投げるんで、B や C は省略記法みたいなもん。そして C が便利すぎて A や B はほとんど見たことがない。
*1:Common Lisp では :format-control