X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=pipes-example.lisp;h=61d8d75ae649c0032d6a4dc63baf679433523f84;hb=163babeb30a614632f95baf869f9cff19c6496f4;hp=2cf07f6a9f5bda662e1a0ec58ab79c002f325a53;hpb=eaad3792a9bf28ec7bfe579f9f0955d213e014f0;p=pipes.git diff --git a/pipes-example.lisp b/pipes-example.lisp index 2cf07f6..61d8d75 100644 --- a/pipes-example.lisp +++ b/pipes-example.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: pipes-example.lisp,v 1.2 2002/11/07 20:26:13 kevin Exp $ +;;;; $Id$ ;;;; ;;;; This file, part of pipes, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -28,7 +28,7 @@ (fibgen 0 1)) -(defun divisible? (x y) +(defun divisible? (x y) (zerop (rem x y))) (defun no-sevens () @@ -40,7 +40,7 @@ (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 () @@ -54,15 +54,15 @@ (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)))) @@ -72,40 +72,48 @@ (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) - (pipe-map (/ 1d0 n) - (pipe-map #'- (ln2-summands (1+ n))))) + (make-pipe (/ 1d0 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)) - (format t "~&euler-transform: ~S" - (pipe-values (euler-transform (pi-stream)) 10)) - (format t "~&accelerate-sequence: ~S" - (pipe-values - (accelerated-sequence #'euler-transform (pi-stream)) 10)))) + (format t "~&pi-stream:~& ~S" + (pipe-values (pi-stream) 10)) + (format t "~& pi-stream euler-transform:~& ~S" + (pipe-values (euler-transform (pi-stream)) 10)) + (format t "~& pi-stream accelerate-sequence:~& ~S" + (pipe-values + (accelerated-sequence #'euler-transform (pi-stream)) 10))) + (format t "~&ln2-stream:~& ~S" + (pipe-values (ln2-stream) 10)) + (format t "~& ln2-stream euler-transform:~& ~S" + (pipe-values (euler-transform (ln2-stream)) 10)) + (format t "~& ln2-stream accelerate-sequence:~& ~S" + (pipe-values + (accelerated-sequence #'euler-transform (ln2-stream)) 10))) +