2013/07/02
10.times
回数が与えられて単に繰り返すだけ、という操作、小さくないプログラムを 書いてる時は滅多に欲しくならないんだけど、使い捨てプログラムを書いてる時に 欲しくなることはあるんで、前から何か欲しいなとは思ってた。 ただ、この機能のためだけに新たなAPIを入れるほどでもないかなあと。
Common Lispだと(loop repeat 10 do something)
と書けるんだけどね。
上のエントリ読んでて、dotimes
の構文で変数を省略できるようにしたらどうかと思いついた。
(dotimes (10) (print 'a))
あるいはいっそのこと
(dotimes 10 (print 'a))
でどうだ。
ところで、無限ループを手軽に書きたいと思うこともある。サーバループとか。
いつも(let loop () something ... (loop))
と書きながら、
Common Lispだと(loop something ...)
でいいのになと思ってた。
これも新たなAPIを入れるほど重要な機能でもない。
上のdotimes構文を使うならこう書けるけど、無限大を明示するのもちょっとおおげさな気はする。
(dotimes +inf.0 something ...)
「上限を省略したら無限」、という慣例に従うなら、例えばこれとかはどうか。
(dotimes () something ...)
あーでもtimesの意味から離れちゃうかなあ。 「何も書いてないものの回数」っていうのはわけわからないか。
結論なしでメモのみ。
(追記2013/07/03 20:53:14 UTC): 実際に書き始めてみたら、(dotimes 10 something)
は
まずいことに気づいた。この構文は一般化すると(dotimes expr something)
に
なるけど、exprに式が来たときに通常の(dotimes (var limit) something)
と
区別がつかなくなる可能性がある。「exprに変数か即値のみ許す」というような例外は
落とし穴を作るので避けたい。というわけで(dotimes (limit) something)
が
落としどころかなあ。
Tag: Gauche
po (2013/07/03 05:00:19):
shiro (2013/07/03 06:27:44):
po (2013/07/03 07:03:50):
shiro (2013/07/03 20:25:17):