(fibgen 0 1))
-(defun divisible? (x y)
+(defun divisible? (x y)
(zerop (rem x y)))
(defun no-sevens ()
(pipe-head stream)
(sieve (pipe-filter
#'(lambda (x)
- (not (divisible? x (pipe-head stream))))
+ (not (divisible? x (pipe-head stream))))
(pipe-tail stream)))))
(defun primes ()
(defun sum-pipe (sum s)
(make-pipe sum
- (sum-pipe (+ sum (pipe-head s))
- (pipe-tail s))))
+ (sum-pipe (+ sum (pipe-head s))
+ (pipe-tail s))))
(defun partial-sums (s)
(make-pipe (pipe-head s) (sum-pipe 0 s)))
(defun pi-summands (n)
(make-pipe (/ 1d0 n)
- (pipe-map #'- (pi-summands (+ n 2)))))
+ (pipe-map #'- (pi-summands (+ n 2)))))
(defun pi-stream ()
(scale-pipe 4d0 (partial-sums (pi-summands 1))))
(defun euler-transform (s)
(let ((s0 (pipe-elt s 0))
- (s1 (pipe-elt s 1))
- (s2 (pipe-elt s 2)))
+ (s1 (pipe-elt s 1))
+ (s2 (pipe-elt s 2)))
(if (and s0 s1 s2)
- (if (eql s1 s2) ;;; series has converged
- +empty-pipe+
- (make-pipe (- s2 (/ (square (- s2 s1))
- (+ s0 (* -2 s1) s2)))
- (euler-transform (pipe-tail s))))
- +empty-pipe+)))
+ (if (eql s1 s2) ;;; series has converged
+ +empty-pipe+
+ (make-pipe (- s2 (/ (square (- s2 s1))
+ (+ s0 (* -2 s1) s2)))
+ (euler-transform (pipe-tail s))))
+ +empty-pipe+)))
(defun ln2-summands (n)
(make-pipe (/ 1d0 n)
- (pipe-map #'- (ln2-summands (1+ n)))))
+ (pipe-map #'- (ln2-summands (1+ n)))))
(defun ln2-stream ()
(partial-sums (ln2-summands 1)))
(defun make-tableau (transform s)
(make-pipe s
- (make-tableau transform
- (funcall transform s))))
+ (make-tableau transform
+ (funcall transform s))))
(defun accelerated-sequence (transform s)
(pipe-map #'pipe-head
- (make-tableau transform s)))
+ (make-tableau transform s)))
(defun run-examples ()
(let ((*print-length* 20))
(format t "~&pi-stream:~& ~S"
- (pipe-values (pi-stream) 10))
+ (pipe-values (pi-stream) 10))
(format t "~& pi-stream euler-transform:~& ~S"
- (pipe-values (euler-transform (pi-stream)) 10))
+ (pipe-values (euler-transform (pi-stream)) 10))
(format t "~& pi-stream accelerate-sequence:~& ~S"
- (pipe-values
- (accelerated-sequence #'euler-transform (pi-stream)) 10)))
+ (pipe-values
+ (accelerated-sequence #'euler-transform (pi-stream)) 10)))
(format t "~&ln2-stream:~& ~S"
- (pipe-values (ln2-stream) 10))
+ (pipe-values (ln2-stream) 10))
(format t "~& ln2-stream euler-transform:~& ~S"
- (pipe-values (euler-transform (ln2-stream)) 10))
+ (pipe-values (euler-transform (ln2-stream)) 10))
(format t "~& ln2-stream accelerate-sequence:~& ~S"
- (pipe-values
- (accelerated-sequence #'euler-transform (ln2-stream)) 10)))
+ (pipe-values
+ (accelerated-sequence #'euler-transform (ln2-stream)) 10)))