コンディションを発生させる - 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 のあとの処理が続行されます。
- 合っていないと、同じエラーが再度シグナルされます。