Generator/Exponential: Difference between revisions

Content added Content deleted
Line 1,415:
 
=={{header|Racket}}==
 
Racket has (potentially infinite) sequences, which handle most use cases of generators. First-class generators are also available in a library.
 
<lang racket>
#lang racket
 
(require racket/generator)
 
;; this is a function that returns a powers generator, usingnot Racket'sa sequencesgenerator
(define (powers nm)
(in-generator ()
(sequence-map (λ (x) (expt x n)) (in-naturals)))
(for ([n (in-naturals)]) (yield (expt n m)))))
 
(define squares (powers 2))
(define cubes (powers 3))
 
;; same here
;; using explicit generators
(define (filterfiltered s1g1 s2g2)
(generator ()
(define g1 (sequence->generator s1))
(define g2 (sequence->generator s2))
(in-generator
(let loop ([n1 (g1)] [n2 (g2)])
(cond [(< n1 n2) (yield n1) (loop (g1) n2)]
Line 1,439 ⟶ 1,437:
[else (loop (g1) (g2))]))))
 
(definefor/list filtered([x (filterin-producer (filtered squares cubes) (lambda (_) #f))]
[_i 1030] #:when (>= i 20))
 
(for/list ([x (sequence-tail filtered 20)]
[_ 10])
x)
</lang>