;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: lists.lisp,v 1.8 2003/07/05 02:32:08 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
;;;;
"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)
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: package.lisp,v 1.54 2003/07/23 22:07:48 kevin Exp $
+;;;; $Id: package.lisp,v 1.55 2003/07/31 07:32:11 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
#:ensure-integer
#:mklist
#:filter
+ #:map-and-remove-nils
#:appendnew
#:memo-proc
#:memoize
;;;; Author: Kevin M. Rosenberg
;;;; Date Started: Apr 2003
;;;;
-;;;; $Id: tests.lisp,v 1.22 2003/07/16 16:01:37 kevin Exp $
+;;;; $Id: tests.lisp,v 1.23 2003/07/31 07:36:55 kevin Exp $
;;;;
;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
;;;;
(deftest css.4 (concat-separated-strings "|" '("ab" "cd") nil) "ab|cd")
(deftest css.5 (concat-separated-strings "|" '("ab" "cd") nil '("ef")) "ab|cd|ef")
-(deftest f.1 (filter #'(lambda (x) (when (oddp x) (* x x)))
+(deftest f.1 (map-and-remove-nils #'(lambda (x) (when (oddp x) (* x x)))
'(0 1 2 3 4 5 6 7 8 9)) (1 9 25 49 81))
+(deftest f.2 (filter #'(lambda (x) (when (oddp x) (* x x)))
+ '(0 1 2 3 4 5 6 7 8 9)) (1 3 5 7 9))
(deftest an.1 (appendnew '(a b c d) '(c c e f)) (a b c d e f))