Skip to content

Instantly share code, notes, and snippets.

@cryks
Created May 10, 2012 13:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save cryks/2653106 to your computer and use it in GitHub Desktop.
Save cryks/2653106 to your computer and use it in GitHub Desktop.
(use gauche.generator)
(use gauche.lazy)
(define-syntax chain
(syntax-rules ()
[(_ lis proc ...)
(let loop ([p (map (lambda (p)
(append `(pa$) p))
(list `proc ...))]
[l lis])
(if (pair? p)
(loop (cdr p) ((eval (car p) (interaction-environment)) l))
l))]))
(define (tmpgen cnt)
(generate
(lambda (yield)
(let loop ([i 0])
(when (< i cnt)
(print "Generate: " i)
(yield i)
(loop (+ i 1)))))))
(chain (generator->lseq (tmpgen 10))
(lmap (^x (* x 2))))
(chain '(1 2 3 4 5)
(map (^x (* x 2)))
(map (^x (+ x 1))))
;; => (3 5 7 9 11)
(take (chain (lrange 0)
(lmap (^x (* x 2))))
10)
;; => (0 2 4 6 8 10 12 14 16 18)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment