;; cat.lisp: lisp function implementing Unix "cat". (brg 15-Mar-2003) ;; illustrates use of "dolines" macro. Much simpler than standard cat(1). (defmacro dolines (initform &rest body) (let ((linevar (car initform)) (streamvar (cadr initform))) `(do ((,linevar (read-line ,streamvar nil) (read-line ,streamvar nil))) ((null ,linevar) ,@(cddr initform)) ,@body))) (defun cat-single-file (filename) (with-open-file (fstr filename) (dolines (l fstr) (write-line l)))) (defun cat-list (filenames) (if (not (null filenames)) (progn (cat-single-file (car filenames)) (cat-list (cdr filenames))) (values))) (defun cat (&rest filenames) (cat-list filenames))