コンディションを発生させる - lisp-cookbook-ja/common-lisp GitHub Wiki

コンディション

普通のエラーを発生させる

ハンドリングはあまり考えずに、最もシンプルなエラーを投げます。

(error "Error!")

エラーがハンドリングされないと、指定されたメッセージがデバッガに表示されます。 コンディションの型は SIMPLE-ERROR になります。

continue リスタート付きのエラーを発生させる

(cerror "Error!")

コンディションの型は 同じく SIMPLE-ERROR です。 ただし、ハンドリングした際に

(handler-bind ((error (lambda (c)
                        (continue c))))
   ...)

とすることで、無視することができます。 デバッガでも CONTINUE メニューを選ぶことができるようになります。

実行時型チェックエラーを発生させる

型チェックを行い、指定の型でない場合にエラーコンディションを発生させます。

(check-type (cdr (list 1 2)) cons)
;=> NIL
(check-type (cdr (list 1)) cons)
; TYPE-ERROR
  • check-typeの第1引数はsetfの第1引数にできるような変数(汎変数)でなければなりません。
  • check-type の投げるエラーは correctable error です。
    • ハンドラの側から (store-value x) リスタートを用いると、(cdr (list 1)) に x を代入することができます。
    • x の型は再チェックされ、型が合っていれば check-type のあとの処理が続行されます。
    • 合っていないと、同じエラーが再度シグナルされます。