これってどう使うの?(1)
この記事は関西Lispユーザ会アドベントカレンダー3日目です。
子供が幼稚園の時に、アドベントカレンダーというものを知りました (キリスト教系の幼稚園に通っていたからです)。もう中学生ですが、 今年もアドベントカレンダーを用意してもらっています。 そのカレンダーを見ながらこの記事を書いています。関西Lispのカレンダーも 早くお菓子で一杯になったいいなと思います。
common lispは”分厚い仕様”の言語で、この関数(あるいはオプションなど)は何
に使えるのだろうというものに出会うことが時々あります(少なくとも私は)。
非英語圏ではまず使い道がないと思えるformatの~P
指定子なんてものもありますが、
有効な使い方があるにも関わらず、その使い方を知らない(思い付かない)ため、
「一体何に使うのだろう?」と思っていたものもあります。
たとえば、gethash
のdefault値オプションです。
これを使うことで、キーが存在しない時にnil以外を返すようになるのですが、
使い道は思い付かず、「nil以外を使って存在チェックをする?いやいや
そのためにgethash
は多値を返しているはず。」という感じでした。
Common Lisp Recipesを読んでいると、
(incf (gethash key hash-table 0))
という例に出会いました。typical idiomだそうです。 知りませんでした。似たようなコードを書くことは何度かありましたが、 キーの存在をチェックしてというようなコードばかりでした。
この手の話が沢山あるのだろうと考えています。そこで、 この場を借りて「これってどう使うの?」というものを挙げてみます。 いろいろ教えもらえると助かります。
最初の「これってどう使うの?」は、loop
のinitially
節です。
ループに初期化をする部分が必要なのは理解できます。
ただ、初期化する時のほとんどは、ループ変数の初期化です(私の場合は)。
なのでwith
節で事足りてしまいます。
ループ変数ではなく、初期化時にグローバルな状態を変更することも
あるとは思いますが、コーディングスタイルとしてはどうなのかなあ…
上のgethash
で書いたような、もっとしっくりする使い方があるのかもしれませんが、
そもそも、initially
節を使った例を見たことがないような気がしてきました。
これぞloop
のinitially
節!、というのはどこかにありませんかね?
と、こんな感じで思い付くものを挙げていきますので、 お付き合いのほどよろしくお願いします。