Skip to content

Instantly share code, notes, and snippets.

@yamasushi
Created August 3, 2012 03:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yamasushi/3244186 to your computer and use it in GitHub Desktop.
Save yamasushi/3244186 to your computer and use it in GitHub Desktop.
イテレータの反転をつかったパイプライン。
(use gauche.generator)
(use text.tr)
(define (generator-inverter)
(^[produce consume] (consume (generate produce) ) ) )
(define (pipeline inverter cmd-in cmd-out)
(^[ g yield]
(inverter
(^[yield]
(cmd-in g yield) )
(^g
(cmd-out g yield) ) ) ) )
(define (cat)
(^[g yield]
(do-generator (f g)
(call-with-input-file
f (^p (generator-for-each yield (cut read-line p) ) ) ) ) ) )
(define (tr from to)
(^[g yield]
(generator-for-each yield (gmap (cut string-tr <> from to) g) ) ) )
(define (grep rx)
(^[g yield]
(generator-for-each yield (gfilter rx g) ) ) )
(define c
(pipeline (generator-inverter)
(cat)
(pipeline (generator-inverter)
(grep #/define/)
(tr "a-z" "A-Z") ) ) )
(c ($ list->generator $ glob "*.scm" ) print)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment