X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=genutils.lisp;h=4565089ddd7f66baba8742dfacddf828e2046531;hb=c0fe2c8fed48e08ef1ebb324f50d13db0d6d5042;hp=be156cc325bcfc012e875eb64cc92a50c276b57d;hpb=93b0a41567a808a95f8fc07bd7c76cedc5fbfa40;p=kmrcl.git diff --git a/genutils.lisp b/genutils.lisp index be156cc..4565089 100644 --- a/genutils.lisp +++ b/genutils.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: genutils.lisp,v 1.9 2002/11/07 22:08:41 kevin Exp $ +;;;; $Id: genutils.lisp,v 1.13 2002/12/14 18:51:53 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -20,17 +20,13 @@ (in-package :kmrcl) (declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3))) -(defmacro bind-when ((bind-var boundForm) &body body) - `(let ((,bind-var ,boundForm)) - (declare (ignore-if-unused ,bind-var)) - (when ,bind-var - ,@body))) +(defmacro let-when ((var test-form) &body body) + `(let ((,var ,test-form)) + (when ,var ,@body))) -(defmacro bind-if ((bind-var boundForm) yup &optional nope) - `(let ((,bind-var ,boundForm)) - (if ,bind-var - ,yup - ,nope))) +(defmacro let-if ((var test-form) if-true &optional if-false) + `(let ((,var ,test-form)) + (if ,var ,if-true ,if-false))) ;; Anaphoric macros @@ -160,6 +156,12 @@ (if val (push val acc)))) (nreverse acc))) +(defun appendnew (l1 l2) + "Append two lists, filtering out elem from second list that are already in first list" + (dolist (elem l2) + (unless (find elem l1) + (setq l1 (append l1 (list elem))))) + l1) ;; Functions @@ -222,15 +224,15 @@ (strm (gensym))) `(let ((,strm ,stream) (,eof ',eof-value)) - (do ((,var (read-line ,strm nil ,eof) (read-line ,strm nil ,eof))) - ((eql ,var ,eof)) - ,@body)))) + (do ((,var (read-line ,strm nil ,eof) (read-line ,strm nil ,eof))) + ((eql ,var ,eof)) + ,@body)))) (defmacro with-each-file-line ((var file) &body body) (let ((stream (gensym))) `(with-open-file (,stream ,file :direction :input) - (with-each-stream-line (,var ,stream) - ,@body)))) + (with-each-stream-line (,var ,stream) + ,@body)))) ;;; Keyword functions @@ -329,15 +331,6 @@ (terpri ostrm))) -;;; Symbol functions - -(defmacro concat-symbol (&rest args) - `(intern (concatenate 'string ,@args))) - -(defmacro concat-symbol-pkg (pkg &rest args) - `(intern (concatenate 'string ,@args) ,pkg)) - - ;;; IO @@ -385,9 +378,9 @@ (defun file-subst (old new file1 file2) (with-open-file (in file1 :direction :input) - (with-open-file (out file2 :direction :output - :if-exists :supersede) - (stream-subst old new in out)))) + (with-open-file (out file2 :direction :output + :if-exists :supersede) + (stream-subst old new in out)))) (defun stream-subst (old new in out) (declare (string old new))