X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=strings.lisp;h=a9acdc27281ad98ef62d1d963d569f0e55fb20a0;hp=96aae865c3eeb98daa34a4c147b6ebc36d4e6c59;hb=14d0c045792f76bbc92f4d3304a608603d0b7524;hpb=b30c91702a68ca81402b646bd7468bfc75c5a804 diff --git a/strings.lisp b/strings.lisp index 96aae86..a9acdc2 100644 --- a/strings.lisp +++ b/strings.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: strings.lisp,v 1.19 2003/05/05 20:08:17 kevin Exp $ +;;;; $Id: strings.lisp,v 1.21 2003/05/06 01:43:14 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -70,7 +70,7 @@ my algorithm. Does allegro use assembly?" ((null end) (if (< pos len) (push (subseq string pos) output) - (unless (or skip-terminal (null output)) + (when (or (not skip-terminal) (zerop len)) (push "" output))) (nreverse output)) (declare (type fixnum pos len) @@ -233,3 +233,20 @@ list of characters and replacement strings." (setf (aref vec i) (char-code (schar str i)))) vec)) +(defun concat-separated-strings (separator &rest lists) + (format nil (format nil "~~{~~A~~^~A~~}" separator) (append-sublists lists))) + +(defun print-separated-strings (strm separator &rest lists) + (declare (optimize (speed 3) (safety 0) (space 0) (debug 0) + (compilation-speed 0))) + (do* ((rest-lists lists (cdr rest-lists)) + (list (car rest-lists) (car rest-lists)) + (last-list (null (cdr rest-lists)) (null (cdr rest-lists)))) + ((null list) strm) + (do* ((lst list (cdr lst)) + (elem (car lst) (car lst)) + (last-elem (null (cdr lst)) (null (cdr lst)))) + ((null lst)) + (write-string elem strm) + (unless (and last-elem last-list) + (write-string separator strm)))))