[Gauche-devel-jp] 辞書とイテレータ

アーカイブの一覧に戻る

KOGURO Naoki naoki****@kogur*****
2003年 1月 19日 (日) 00:54:46 JST


小黒です。

> なんとかこういった問題をうまく解決できないものでしょうか。ちなみに上の
> 例は、いずれもSQLならごく簡単に書けて、(たぶんRDB内部では)効率的に実行
> してくれるであろう処理です。
> 
> 個々の問題は下に挙げるような小手先の対策でもけっこうなんとかなるのです
> が、一般的な解決は
> 
> 「回っている最中に要素の更新/削除を効率良く実行できるイテレータ」
> 
> になりそうな気がしています。
> 
> 何かいいアイディアとか、この言語が参考になるよとか、俺様のすばらしい実
> 装を見れとかあったら教えてください。

hash-table-for-each から手続きを呼ぶときに、値の設定、削除を行なうクロー
ジャを作って引数として渡すのはどうでしょうか。

例えば、偶数である要素を抜く処理なら、

(hash-table-for-each
 hash
 (lambda (key val put del)
  (when (even? val) (del))))

すべての値を倍にして再格納する処理は、

(hash-table-for-each
 hash
 (lambda (key val put del) (put (* val 2))))

と書くとか。少なくとも、 hash-table-for-each 内部ではポインタを知って
いるので、効率のよい put, del が作れるはずです。


----------------------------------------------------
 小黒 直樹 (KOGURO, Naoki)
 E-mail: naoki****@kogur***** / kogur****@dd*****
----------------------------------------------------



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る