Gauche:find系APIの整理

Gauche:find系APIの整理

Shiro(2021/05/28 21:55:42 UTC): 「コレクションから条件に合う要素を見つける」という操作について、命名やインタフェースに若干混乱があるので整理

find系

汎用性を考えるなら「pred, collection, :optional failure -> element」で統一するのが良さそう。3.は歴史的遺物だけど、互換性を残したまま引数は入れ替えられるので、2.に統一すべき。

collectionが順序つきの場合、「逆方向から探す」というバリエーションがあり得る。

    1. :: pred, collection -> element
      ifind-tail srfi-116, scheme.ilist
      lseq-find-tail srfi-127, scheme.lseq
      stream-find-tail util.stream, Gauche独自
    2. :: pred, collection, (() -> element) -> element
      idequeue-find-right srfi-134, scheme.idequeue (failureはoptional)

any系

any? 系

seek系

findany、またいくつかのsrfiにみられるsearch系(predicateではなく探す要素を取り、結果に応じて呼ばれる継続手続きを取る)を統一的に実装するために、 Gaucheでgauche.dictionaryに実験的に入れてみたもの。まだundocumented。

dictionary frameworkで使うなら、collectionが先に来る方が良い。

継続手続きに関しては、search系がfailure, successの順なのでそれに合わせる方が良いか。0.9.11で変える。

Maybeモナド

Maybe find系

Maybe any系

More ...