これってどう使うの?(1)


これってどう使うの?(1)

この記事は関西Lispユーザ会アドベントカレンダー3日目です。

子供が幼稚園の時に、アドベントカレンダーというものを知りました (キリスト教系の幼稚園に通っていたからです)。もう中学生ですが、 今年もアドベントカレンダーを用意してもらっています。 そのカレンダーを見ながらこの記事を書いています。関西Lispのカレンダーも 早くお菓子で一杯になったいいなと思います。

common lispは”分厚い仕様”の言語で、この関数(あるいはオプションなど)は何 に使えるのだろうというものに出会うことが時々あります(少なくとも私は)。 非英語圏ではまず使い道がないと思えるformatの~P指定子なんてものもありますが、 有効な使い方があるにも関わらず、その使い方を知らない(思い付かない)ため、 「一体何に使うのだろう?」と思っていたものもあります。

たとえば、gethashのdefault値オプションです。 これを使うことで、キーが存在しない時にnil以外を返すようになるのですが、 使い道は思い付かず、「nil以外を使って存在チェックをする?いやいや そのためにgethashは多値を返しているはず。」という感じでした。 Common Lisp Recipesを読んでいると、

(incf (gethash key hash-table 0))

という例に出会いました。typical idiomだそうです。 知りませんでした。似たようなコードを書くことは何度かありましたが、 キーの存在をチェックしてというようなコードばかりでした。

この手の話が沢山あるのだろうと考えています。そこで、 この場を借りて「これってどう使うの?」というものを挙げてみます。 いろいろ教えもらえると助かります。

最初の「これってどう使うの?」は、loopinitially節です。

ループに初期化をする部分が必要なのは理解できます。 ただ、初期化する時のほとんどは、ループ変数の初期化です(私の場合は)。 なのでwith節で事足りてしまいます。 ループ変数ではなく、初期化時にグローバルな状態を変更することも あるとは思いますが、コーディングスタイルとしてはどうなのかなあ…

上のgethashで書いたような、もっとしっくりする使い方があるのかもしれませんが、 そもそも、initially節を使った例を見たことがないような気がしてきました。 これぞloopinitially節!、というのはどこかにありませんかね?

と、こんな感じで思い付くものを挙げていきますので、 お付き合いのほどよろしくお願いします。