Shammer's Philosophy

My private adversaria

文字列を数値に変換するときに

Lisp では、parse-integer という関数を使用する。当然、数字にできない文字列があるとエラーになる。

? (handler-case (parse-integer "aaa") (error (c) (format t "error-type is ~A.~%" (type-of c))))
error-type is PARSE-INTEGER-NOT-INTEGER-STRING.
NIL
?

しかし、PARSE-INTEGER-NOT-INTEGER-STRING を catch しようとしたけれどもうまくいかなかった。これをキャッチしたときは文字列の数値変換に失敗したものとして何か処理をさせることができれば、、、と思ったのだが。そして、調べていてキーワード引数 junk-allowed というものの存在を知った。これを使用すると、変換に失敗したときは nil が返る。

? (parse-integer "aaa" :junk-allowed t)
NIL
0
? 

これは楽チンだ。変換後、nil になっているかをチェックするだけ。