r7061: initial property settings
[pipes.git] / pipes-example.lisp
index 3ce8cc09078e8b4cfd63083e19cd30540db7394f..6e7b0c0e993c26290a8d85bc513ca07ab9183c19 100644 (file)
-;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-\r
-;;;; *************************************************************************\r
-;;;; FILE IDENTIFICATION\r
-;;;;\r
-;;;; Name:          pipes-examples.lisp\r
-;;;; Purpose:       Pipe examples\r
-;;;; Programmer:    Kevin M. Rosenberg\r
-;;;; Date Started:  Apr 2000\r
-;;;;\r
-;;;; $Id: pipes-example.lisp,v 1.3 2003/03/15 00:48:56 kevin Exp $\r
-;;;;\r
-;;;; This file, part of pipes, is Copyright (c) 2002 by Kevin M. Rosenberg\r
-;;;;\r
-;;;; *************************************************************************\r
-\r
-(in-package #:pipes-user)\r
-\r
-\r
-(defun integers (&optional (start 0) end)\r
-  (if (or (null end) (<= start end))\r
-      (make-pipe start (integers (+ start 1) end))\r
-    nil))\r
-\r
-(defun fibgen (a b)\r
-  (make-pipe a (fibgen b (+ a b))))\r
-\r
-(defun fibs ()\r
-  (fibgen 0 1))\r
-\r
-\r
-(defun divisible? (x y) \r
-  (zerop (rem x y)))\r
-\r
-(defun no-sevens ()\r
-  (pipe-filter #'(lambda (x) (not (divisible? x 7))) (integers)))\r
-\r
-\r
-(defun sieve (stream)\r
-  (make-pipe\r
-   (pipe-head stream)\r
-   (sieve (pipe-filter\r
-           #'(lambda (x)\r
-              (not (divisible? x (pipe-head stream))))\r
-           (pipe-tail stream)))))\r
-\r
-(defun primes ()\r
-  (sieve (integers 2)))\r
-\r
-\r
-;; Pi\r
-\r
-(defun scale-pipe (factor pipe)\r
-  (pipe-map #'(lambda (x) (* x factor)) pipe))\r
-\r
-(defun sum-pipe (sum s)\r
-  (make-pipe sum\r
-            (sum-pipe (+ sum (pipe-head s))\r
-                      (pipe-tail s))))\r
-\r
-(defun partial-sums (s)\r
-  (make-pipe (pipe-head s) (sum-pipe 0 s)))\r
-\r
-(defun pi-summands (n)\r
-  (make-pipe (/ 1d0 n)\r
-            (pipe-map #'- (pi-summands (+ n 2)))))\r
-\r
-(defun pi-stream ()\r
-  (scale-pipe 4d0 (partial-sums (pi-summands 1))))\r
-\r
-(defun square (x)\r
-  (* x x))\r
-\r
-(defun euler-transform (s)\r
-  (let ((s0 (pipe-elt s 0))\r
-       (s1 (pipe-elt s 1))    \r
-       (s2 (pipe-elt s 2)))\r
-    (if (and s0 s1 s2)\r
-       (if (eql s1 s2) ;;; series has converged \r
-               +empty-pipe+\r
-         (make-pipe (- s2 (/ (square (- s2 s1))\r
-                             (+ s0 (* -2 s1) s2)))\r
-                    (euler-transform (pipe-tail s))))\r
-         +empty-pipe+)))\r
-\r
-\r
-(defun ln2-summands (n)\r
-  (make-pipe (/ 1d0 n)\r
-            (pipe-map #'- (ln2-summands (1+ n)))))\r
-\r
-(defun ln2-stream ()\r
-  (partial-sums (ln2-summands 1)))\r
-\r
-(defun make-tableau (transform s)\r
-  (make-pipe s\r
-            (make-tableau transform\r
-                          (funcall transform s))))\r
-\r
-(defun accelerated-sequence (transform s)\r
-  (pipe-map #'pipe-head\r
-           (make-tableau transform s)))\r
-\r
-\r
-(defun run-examples ()\r
-  (let ((*print-length* 20))\r
-    (format t "~&pi-stream:~&  ~S"\r
-           (pipe-values (pi-stream) 10))\r
-    (format t "~& pi-stream euler-transform:~&  ~S"\r
-           (pipe-values (euler-transform (pi-stream)) 10))\r
-    (format t "~& pi-stream accelerate-sequence:~&  ~S"\r
-           (pipe-values\r
-            (accelerated-sequence #'euler-transform (pi-stream)) 10)))\r
-      (format t "~&ln2-stream:~&  ~S"\r
-           (pipe-values (ln2-stream) 10))\r
-    (format t "~& ln2-stream euler-transform:~&  ~S"\r
-           (pipe-values (euler-transform (ln2-stream)) 10))\r
-    (format t "~& ln2-stream accelerate-sequence:~&  ~S"\r
-           (pipe-values\r
-            (accelerated-sequence #'euler-transform (ln2-stream)) 10)))\r
-\r
+;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          pipes-examples.lisp
+;;;; Purpose:       Pipe examples
+;;;; Programmer:    Kevin M. Rosenberg
+;;;; Date Started:  Apr 2000
+;;;;
+;;;; $Id$
+;;;;
+;;;; This file, part of pipes, is Copyright (c) 2002 by Kevin M. Rosenberg
+;;;;
+;;;; *************************************************************************
+
+(in-package #:pipes-user)
+
+
+(defun integers (&optional (start 0) end)
+  (if (or (null end) (<= start end))
+      (make-pipe start (integers (+ start 1) end))
+    nil))
+
+(defun fibgen (a b)
+  (make-pipe a (fibgen b (+ a b))))
+
+(defun fibs ()
+  (fibgen 0 1))
+
+
+(defun divisible? (x y) 
+  (zerop (rem x y)))
+
+(defun no-sevens ()
+  (pipe-filter #'(lambda (x) (not (divisible? x 7))) (integers)))
+
+
+(defun sieve (stream)
+  (make-pipe
+   (pipe-head stream)
+   (sieve (pipe-filter
+           #'(lambda (x)
+              (not (divisible? x (pipe-head stream))))
+           (pipe-tail stream)))))
+
+(defun primes ()
+  (sieve (integers 2)))
+
+
+;; Pi
+
+(defun scale-pipe (factor pipe)
+  (pipe-map #'(lambda (x) (* x factor)) pipe))
+
+(defun sum-pipe (sum s)
+  (make-pipe sum
+            (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)))))
+
+(defun pi-stream ()
+  (scale-pipe 4d0 (partial-sums (pi-summands 1))))
+
+(defun square (x)
+  (* x x))
+
+(defun euler-transform (s)
+  (let ((s0 (pipe-elt s 0))
+       (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+)))
+
+
+(defun ln2-summands (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))))
+
+(defun accelerated-sequence (transform s)
+  (pipe-map #'pipe-head
+           (make-tableau transform s)))
+
+
+(defun run-examples ()
+  (let ((*print-length* 20))
+    (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)))
+