; Haskell style list comprehension ; Copyright 2005 Brian Alliet ; [expr|guard, pat <- gen] => (list-comp expr guard (pat <- gen)) ; FEATURE: Optimize this, right now it generates too many 1 element lists (define-syntax list-comp (syntax-rules (<-) ((list-comp e) (cons e '())) ((list-comp e (p <- l) q ...) (concat-map (lambda-match (p (list-comp e q ...)) (_ '()) ) l)) ((list-comp e b q ...) (if b (list-comp e q ...) '())) ))