Skip to content

Instantly share code, notes, and snippets.

@valvallow
Forked from cryks/gist:2653106
Created May 11, 2012 03:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valvallow/2657318 to your computer and use it in GitHub Desktop.
Save valvallow/2657318 to your computer and use it in GitHub Desktop.
(use gauche.generator)
(use gauche.lazy)
(define-syntax chain
(syntax-rules ()
((_ ls (p1 p2)) (p1 p2 ls))
((_ ls (p1 p2) x ...)
(begin (chain ls (p1 p2))
(chain ls x ...)))))
(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