public
Created

for/seq for sequence generating through for loops

  • Download Gist
for-seq.rkt
Racket
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
#lang racket
(require racket/generator)
 
(define-syntax (for/seq stx)
(syntax-case stx ()
[(_ clauses . body)
#`(in-generator
(for/fold/derived #,stx
()
clauses
(define d (let () . body))
(yield d)
(values)))]))
 
(define seq1 (for/seq ([i (in-range 3)]
[j (in-list '(a b c))])
(displayln "here")
(list j (* i i))))
 
 
(define-syntax (for*/seq stx)
(syntax-case stx ()
[(_ clauses . body)
#`(in-generator
(for*/fold/derived #,stx
()
clauses
(define d (let () . body))
(yield d)
(values)))]))
 
 
(define seq2 (for*/seq ([i (in-range 3)]
[j (in-list '(a b c))])
(displayln "here")
(list j (* i i))))

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.