第3回 慢性的CL勉強会[予習]
第3回 慢性的CL勉強会@Lingr 8時だョ!全員集合の資料の一つである
「Common Lisp における例外処理 〜Condition System の活用〜」
を読み終わったので適当にまとめておきます。
*全体として*
CommonLispの例外処理の話。
例外を発生させてハンドルするというのは他の言語とそれほど変わらないと思いますが、
デバッガを立ち上げるかどうかを制御したり、デバッガをプログラマが定義したものに置き換えたり、
エラー発生後に行うこと(処理を止める、値を再入力させる)を
ユーザにインタラクティブに問い合わせる仕組みがあるのが
なんとも独特で凄い感じでした。
*疑問など*
例外処理自体の説明は非常に分かりやすかったのですが、
例外と関係ないところが分からなかったりしました(笑)
– loopマクロって多用するものなの?
なんだかサンプルのソースコードに山ほどloopマクロが出てきたんですが、
CommonLisp使いってloopマクロを多用するのでしょうか。
loopマクロってなんだかそれ自体が一つの言語に見えるくらい、
いろいろ出来るみたいで大変そうなんですけど。
– (lambda (cond) (declare (ignore cond)) …)
これは引数condは使用しないっていう意味の宣言なんでしょうか。
うまく最適化されるのかな。
– (let ((#:G1000 nil)) (declare (ignorable #:G1000)) …)
上と同じ解釈をすると、#:G1000は使うかもしれないし、
使わないかもしれないといった意味になるんでしょうか。
– #’car と ’car
#’carは(function car)、’carは(quote car)というのは分かるのですが、
関数が必要とされる箇所でこの二つって区別されましたっけ?
lambda式につける場合は#’でないと駄目なのは明らかなんですが、
シンボルに対してはどうだったっけ……。