From eaad3792a9bf28ec7bfe579f9f0955d213e014f0 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Thu, 7 Nov 2002 20:27:34 +0000 Subject: [PATCH] r3332: *** empty log message *** --- debian/copyright | 5 +++ debian/upload.sh | 6 --- package.lisp | 6 +-- pipes-example.lisp | 36 ++++++++-------- pipes.lisp | 101 +++++++++++++++++++++++---------------------- 5 files changed, 77 insertions(+), 77 deletions(-) delete mode 100755 debian/upload.sh diff --git a/debian/copyright b/debian/copyright index 078105c..32c17f2 100644 --- a/debian/copyright +++ b/debian/copyright @@ -4,6 +4,11 @@ Nov 2, 2002. It was downloaded from ftp://ftp.b9.com/pipes/ Upstream Authors: Kevin Rosenberg & Peter Norvig +Changes compared to upstream: + - Created package file and .asd file + - Renamed functions to always start with pipe- + + Pipes's Copyright Statement --------------------------- diff --git a/debian/upload.sh b/debian/upload.sh deleted file mode 100755 index cc04ae5..0000000 --- a/debian/upload.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -e - -dup pipes -Uftp.med-info.com -D/home/ftp/pipes -su $* - - - diff --git a/package.lisp b/package.lisp index 2c9d6c9..d8c4bf0 100644 --- a/package.lisp +++ b/package.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: package.lisp,v 1.1 2002/11/02 17:49:10 kevin Exp $ +;;;; $Id: package.lisp,v 1.2 2002/11/07 20:26:13 kevin Exp $ ;;;; ;;;; This file, part of pipes, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -28,8 +28,8 @@ #:pipe-tail #:pipe-head #:pipe-elt - #:enumerate - #:pipe-display + #:pipe-enumerate + #:pipe-values #:pipe-force #:pipe-filter #:pipe-map diff --git a/pipes-example.lisp b/pipes-example.lisp index c5722ec..2cf07f6 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.1 2002/11/02 17:49:10 kevin Exp $ +;;;; $Id: pipes-example.lisp,v 1.2 2002/11/07 20:26:13 kevin Exp $ ;;;; ;;;; This file, part of pipes, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -17,13 +17,12 @@ (defun integers (&optional (start 0) end) - "a pipe of integers from START to END." (if (or (null end) (<= start end)) - (make-pipe start (integers (+ start 1) end)) + (make-pipe start (integers (+ start 1) end)) nil)) (defun fibgen (a b) - (make-pipe a (fibgen b (+ a b)))) + (make-pipe a (fibgen b (+ a b)))) (defun fibs () (fibgen 0 1)) @@ -32,9 +31,8 @@ (defun divisible? (x y) (zerop (rem x y))) - (defun no-sevens () - (pipe-filter #'(lambda (x) (not (divisible? x 7))) (integers))) + (pipe-filter #'(lambda (x) (not (divisible? x 7))) (integers))) (defun sieve (stream) @@ -67,23 +65,23 @@ (pipe-map #'- (pi-summands (+ n 2))))) (defun pi-stream () - (scale-pipe 4d0 (partial-sums (pi-summands 1)))) + (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 + (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)))) + (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) @@ -105,9 +103,9 @@ (defun run-examples () (let ((*print-length* 20)) (format t "~&pi-stream: ~S" - (pipe-display (pi-stream) 10)) + (pipe-values (pi-stream) 10)) (format t "~&euler-transform: ~S" - (pipe-display (euler-transform (pi-stream)) 10)) + (pipe-values (euler-transform (pi-stream)) 10)) (format t "~&accelerate-sequence: ~S" - (pipe-display + (pipe-values (accelerated-sequence #'euler-transform (pi-stream)) 10)))) diff --git a/pipes.lisp b/pipes.lisp index 9b6b4c7..1450ca3 100644 --- a/pipes.lisp +++ b/pipes.lisp @@ -7,7 +7,7 @@ ;;;; Programmers: Kevin M. Rosenberg and Peter Norvig ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: pipes.lisp,v 1.1 2002/11/02 17:49:10 kevin Exp $ +;;;; $Id: pipes.lisp,v 1.2 2002/11/07 20:26:13 kevin Exp $ ;;;; ;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg and ;;;; Copyright (c) 1998-2002 by Peter Norvig. @@ -23,104 +23,107 @@ (defconstant +empty-pipe+ nil) (defmacro make-pipe (head tail) - "create a pipe by eval'ing head and delaying tail." + "Create a pipe by evaluating head and delaying tail." `(cons ,head #'(lambda () ,tail))) (defun pipe-tail (pipe) - "return tail of pipe or list, and destructively update + "Return tail of pipe or list, and destructively update the tail if it is a function." - ;; pipes should never contain functions as values (if (functionp (rest pipe)) (setf (rest pipe) (funcall (rest pipe))) (rest pipe))) (defun pipe-head (pipe) (first pipe)) -(defun pipe-elt (pipe n) - "nth element of pipe, 0 based." - (if (= n 0) (pipe-head pipe) - (pipe-elt (pipe-tail pipe) (- n 1)))) +(defun pipe-elt (pipe i) + "The i-th element of pipe, 0-based." + (if (= i 0) + (pipe-head pipe) + (pipe-elt (pipe-tail pipe) (- i 1)))) -(defun enumerate (pipe &key count key (result pipe)) - "go through all or count elements of pipe, - possibly applying the key function. " +(defun pipe-enumerate (pipe &key count key (result pipe)) + "Go through all (or count) elements of pipe, + possibly applying the KEY function. (Try PRINT.)" + ;; Returns RESULT, which defaults to the pipe itself. (if (or (eq pipe +empty-pipe+) (eql count 0)) result (progn (unless (null key) (funcall key (pipe-head pipe))) - (enumerate (pipe-tail pipe) + (pipe-enumerate (pipe-tail pipe) :count (if count (1- count)) - :key key - :result result)))) + :key key :result result)))) -(defun pipe-display (pipe &optional count) - (enumerate pipe :count count)) +(defun pipe-values (pipe &optional count) + "Simple wrapper to return values of a pipe" + (pipe-enumerate pipe :count count)) (defun pipe-force (pipe) - (enumerate pipe)) + "Force the enumeration of all of the pipe. Never returns +if the pipe is infinite in length." + (pipe-enumerate pipe)) (defun pipe-filter (predicate pipe) - "keep only items in (non-null) pipe satisfying predicate" - (if (eq pipe +empty-pipe+) + "Keep only items in pipe satisfying predicate." + (if (eq pipe +empty-pipe+) +empty-pipe+ - (let ((head (pipe-head pipe)) - (tail (pipe-tail pipe))) + (let ((head (pipe-head pipe)) + (tail (pipe-tail pipe))) (if (funcall predicate head) - (make-pipe head (pipe-filter predicate tail)) + (make-pipe head (pipe-filter predicate tail)) (pipe-filter predicate tail))))) (defun pipe-map (fn pipe) - "Map fn over pipe, delaying all but the first fn call, - collecting res