functional programming - What's the equivalent of Clojure's iterate function in Racket -
i'm playing racket today, , trying produce indefinite sequence of numbers based on multiple applications of same function.
in clojure i'd use iterate function this, i'm not sure equivalent in racket.
in situations can replace use of iterate
for/fold
.
> (define (mult2 x) (* x 2)) > (for/fold ([x 1]) ; initial value of x 1 ([i 8]) ; count i=0,...,7 (mult2 x)) ; put x = (mult2 x) 256
the advantage of for/fold
can iterate more variables @ time:
(define (mult2 x) (* x 2)) (define (div2 x) (/ x 2)) (for/fold ([x 1] ; bind x 1 [y 1]) ; bind y 1 ([i 8]) ; i=0,...,7 (values (mult2 x) ; put x = (mult2 x) (div2 y))) ; put y = (div2 y)
this return 2 values: 256
, 1/256
.
collecting elements easy. here fibonacci example:
(for/fold ([fs '(1)] ; list of fibonacci numbers generated far [f1 1] ; fibonacci number [f2 1]) ; following fibonacci number ([i 10]) ; = 0,...,9 (values (cons f2 fs) ; cons new fibonacci number list fs f2 ; put f1 = (the old) f2 (+ f1 f2))) ; put f2 = (the old) f1+f2
the result consists of 3 values:
'(89 55 34 21 13 8 5 3 2 1 1) 89 144
Comments
Post a Comment