Gauche:遅延glob
yamasushi(2013/04/10 10:10:47 UTC)globを抽象的にあつかうことができるのではないかと思い、いろいろ試してみます。
- glob
(define-module komono-glob (use gauche.generator) (use gauche.lazy) (use util.stream) (export glob-lseq glob-generator glob-stream glob-for-each ) ) (select-module komono-glob) (define (glob-for-each pat proc . rest) (apply glob-fold pat (^ (x s) (proc x) s) 0 rest) (values) ) (define (glob-stream pat . rest) (iterator->stream (^[yield end] (apply glob-for-each pat yield rest) (end) ) ) ) (define (glob-generator pat . rest) (generate (^y (apply glob-for-each pat y rest) ) ) ) (define (glob-lseq pat . rest) ($ generator->lseq $ apply glob-generator pat rest))
- ライブラリアクセスのための関数library-for-eachのパタンには"**"を指定できないので、全モジュールを列挙するには不便です。そこで、上の成果を使い列挙します。
- コードはGauche:モジュールの列挙に移動しました。
Tags: util.stream, gauche.generator, gauche.lazy