X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=lists.lisp;h=77b6fa52401157e11b78451156903100a4df6775;hp=8bc548d829f924dabe8bf4b11b56618987e589ad;hb=f02806a9c747318814e3b46520d2ceebd6031488;hpb=7c7e6a18fd67e5370fd78690da2642cbe79e4113 diff --git a/lists.lisp b/lists.lisp index 8bc548d..77b6fa5 100644 --- a/lists.lisp +++ b/lists.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: lists.lisp,v 1.7 2003/06/20 08:35:22 kevin Exp $ +;;;; $Id: lists.lisp,v 1.9 2003/07/31 07:32:11 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -22,13 +22,20 @@ "Make into list if atom" (if (listp obj) obj (list obj))) -(defun filter (fn lst) - "Filter a list by function, eliminate elements where fn returns nil" +(defun map-and-remove-nils (fn lst) + "mao a list by function, eliminate elements where fn returns nil" (let ((acc nil)) (dolist (x lst (nreverse acc)) (let ((val (funcall fn x))) (when val (push val acc)))))) +(defun filter (fn lst) + "Filter a list by function, eliminate elements where fn returns nil" + (let ((acc nil)) + (dolist (x lst (nreverse acc)) + (when (funcall fn x) + (push x acc))))) + (defun appendnew (l1 l2) "Append two lists, filtering out elem from second list that are already in first list" (dolist (elem l2 l1) @@ -176,11 +183,4 @@ ,plist) (setf ,plist (append ,plist (list ,pkey ,value))))))) -(defun get-plist (key plist &key (test 'eql) (missing nil)) - (let-if (pos (member key plist :test test)) - (cadr pos) - missing)) -(defun (setf get-plist) (value key plist &key (test #'eql)) - (update-plist key value plist :test test) - value)