y2q_actionman’s ゴミクズチラ裏

内向きのメモ書きを置いてます

Common Lisp の iterate の拡張計画メモ

概要

PythonitertoolsCommon Lispiterate に持っていこうとしてみたら、最初の方の chain で足止め。どうしよう。

なぜ?

1)

  • Pythonitertools は、色々なコレクション型に適用できるイテレータがあることが前提。
  • Common Lisp には、汎用のイテレータ構造はない。
  • その代わりに iterate では、 iteration-driving clause の形で判断している。 (in-vector とか)

2)

  • Pythonitertoolschain は、複数イテレータを連鎖させるもの。
  • iterate 的に考えて、 iteration-driving clause を連鎖したいという気持ちになる。
  • つまり、 iteration-driving clause のマクロ展開結果を得て、そこに何らかのコードを足すか、マクロ展開の結果実行されるコードをフックするかしたい。
  • これは、 iterate のマニュアルに載っている拡張の方法だけではできない。
  • iterate のコードをしっかり理解しないと無理っぽい。

3)

  • さらに、 iterate のコードの冒頭のコメントに、 「TODO: concatenate という clause を足す」のようなことが書いてある。やりたいことは上記のものと同様。
  • ここで TODO になっているということは、実装は一筋縄ではいかないんだろうな・・という予想をしている。

妥協案

  • 汎用のイテレータ構造を実装??

    • ダサい
  • 一旦、「リストにだけ適用できます」バージョンを作る。

    • とりあえず、こうしようかと画策中。

P.S.

Pythonitertools は 「リッチなイテレータ構造」 + 「単機能のループ構文」

Common Lispiterate は 「単なるデータ構造」 + 「高機能なループ構文」

やっぱり、言語の拡張しやすい方に思想が向くものなのだろうか。