Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- a_n = a * r_{n − 1}
- a_n = r * a_{n − 1} for every integer n ≥ 1.
- #lang racket
- ;; a - initial value
- ;; r - common ratio
- ;; n - number of terms in the sequence
- (define py-range ; Returns the pythonic `range()`.
- (lambda (start stop (step 1))
- (cond ((>= start stop) '())
- (else (cons (+ (- start 1) step)
- (py-range (+ start step) stop step))))))
- (define geometric-sequence-with-map
- (lambda (a r n)
- (let ((nth-term-geo-seq-closure ; explicite formula
- (lambda (k) (* a (expt r (- k 1)))))) ; for kth term
- (map nth-term-geo-seq-closure (py-range 1 (+ n 1))))))
- (geometric-sequence-with-map 1/2 1/2 10)
- ;; '(1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512 1/1024)
- (define (geometric-sequence a r n)
- (letrec ((k -1)
- (geo-seq (lambda (a r k)
- (cond ((zero? (- n k)) '())
- (else (cons (* a (expt r (+ k 1)))
- (geo-seq a r (+ k 1))))))))
- (geo-seq a r k)))
- (geometric-sequence 1/2 1/2 10)
- ;; '(1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512 1/1024 1/2048)
- (defun py-range (start stop &optional (step 1))
- (loop for x from start below stop by step
- collect x))
- (defun geometric-sequence-with-map (a r n)
- (labels ((nth-term-geometric-sequence-closure (k) ; explicit formula
- (* a (expt r (1- k))))) ; for kth term
- (mapcar #'nth-term-geometric-sequence-closure (py-range 1 (1+ n)))))
- (geometric-sequence-with-map 1/2 1/2 10)
- ;; (1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512 1/1024)
- (defun geometric-sequence (a r n)
- (let ((last-element (* a (expt r (- n 1)))))
- (labels ((geo-seq (a r n &optional (acc-l (list last-element)))
- (cond ((zerop n) acc-l)
- (t (geo-seq a r (- n 1) (cons (* a (expt r (1- n)))
- acc-l))))))
- (geo-seq a r n))))
- (defun geometric-sequence (a r n)
- (let ((k -1))
- (labels ((geo-seq (a r k &optional acc-l)
- (cond ((zerop (- n k)) acc-l)
- (t (geo-seq a r (1+ k) (cons (* a (expt r (1+ k)))
- acc-l))))))
- (geo-seq a r k '()))))
- (defun geometric-sequence (a r n)
- (let ((k -1))
- (labels ((geo-seq (a r k)
- (cond ((zerop (- n k)) '())
- (t (cons (* a (expt r (1+ k)))
- (geo-seq a r (1+ k)))))))
- (geo-seq a r k))))
- (geometric-sequence 1/2 1/2 10)
- ;; (1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512 1/1024 1/2048)
Add Comment
Please, Sign In to add comment