Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alternate two values

I have the code

(define alternate
(letrec ([f (lambda (x) (cons x (lambda () (f (+ x 1)))))])
(lambda () (f 1))))

The result is 1,2,3.. How i could change it to take 1,2,1,2,1,2..

I tried cons inside the f but didn't work. Any ideas?

like image 631
Rea Avatar asked Aug 15 '26 15:08

Rea


1 Answers

You might also find generators useful: docs

Welcome to DrRacket, version 5.3.3.5 [3m].
Language: racket [custom].
> (require racket/generator)
> (define g (generator () (let LOOP () (yield 1) (yield 2) (LOOP))))
> (g)
1
> (g)
2
> (g)
1
> (g)
2

UPDATE:

Even better, use an infinite-generator:

Welcome to DrRacket, version 5.3.3.5 [3m].
Language: racket [custom].
> (require racket/generator)
> (define g (infinite-generator (yield 1) (yield 2)))
> (g)
1
> (g)
2
> (g)
1
> (g)
2
like image 56
stchang Avatar answered Aug 18 '26 22:08

stchang



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!