Subject: Re: Lisp io performance. From: Erik Naggum <erik@naggum.no> Date: 1999/01/19 Newsgroups: comp.lang.lisp Message-ID: <3125763790062135@naggum.no> * Barry Margolin <barmar@bbnplanet.com> | BTW, stylistic note: any time a number outside the range -1:1, e.g. 8192, | appears multiple times in a piece of code, it's probably a candidate for | a DEFCONSTANT. In the case of this function, DEFPARAMETER might be more | appropriate, so you can experiment with different size buffers simply by | changing the value (for those of you who have wondered, this is where | DEFPARAMETER gets its name). in this case, I think it's also worth pointing out that the size of the string is still available. (length buffer) will yield 8192. FWIW, here's my cut at it: (defconstant disk-block-size 8192) (defun copy-file (from to) (with-open-file (in from :direction :input) (with-open-file (out to :direction :output :if-exists :supersde) (let ((buffer (make-array disk-block-size :element-type (stream-element-type in)))) (loop for read = (read-sequence buffer in) until (zerop read) do (write-sequence buffer out :end read)))))) #:Erik -- SIGTHTBABW: a signal sent from Unix to its programmers at random intervals to make them remember that There Has To Be A Better Way.