Posted 2015-07-10 01:35:42 GMT

まあ罠という程でもないのですが、 format でこんなのを良く書きます。

format nil "~4,'0D" 8

数字を0で埋め草して表示する訳なのですが、

こんなことをして悩んでしまいました。

何故埋め草がないのかと。

規格では、 数字であることが必須のようなのでエラーにしてくれても良い気はするのですが、数字でない場合は、 エラーにはせず、黙って princ で出力する処理系が多い みたいです。

コメントでshiroさんから整数でない場合は ~A で処理することをご指摘頂きました。

リンクまで張ってましたが思いっきり見逃してました…。( If arg is not an integer, it is printed in ~A format and decimal base. )

賢い処理系

と思ったのですが、Lucid CLだと、埋め草ありで表示してくれます。

範囲を越えた場合は、そのまま出力

他にもあるのかなと思って確認してみましたが、

LispWorks

Lucid Common Lisp

Scieneer Common Lisp

MIT CADR

Symbolics Common Lisp

がこういう処理をしてくれるようです。

まとめ

しかし、賢いと思った実装ですが、実装を眺めてみると文字列の表現をパーズして数値に変換している訳でもなく、 ~A で処理する場合と同じようなので大した差はないようです。

やっぱりエラーにして欲しい。

■

