Rewrite ASSOC using SATISFIES-TEST-P
authorOwen Rodley <Strigoides@gmail.com>
Sat, 18 May 2013 04:32:50 +0000 (16:32 +1200)
committerOwen Rodley <Strigoides@gmail.com>
Sat, 18 May 2013 04:32:50 +0000 (16:32 +1200)
src/list.lisp
tests/list.lisp

index a41d821..c44907f 100644 (file)
     (setq list (cdr list))))
 
 
-(defun assoc (x alist &key (test #'eql))
+(defun assoc (x alist &key key (test #'eql testp) (test-not #'eql test-not-p))
   (while alist
-    (if (funcall test x (caar alist))
+    (if (satisfies-test-p x (caar alist) :key key :test test :testp testp
+                          :test-not test-not :test-not-p test-not-p)
       (return)
       (setq alist (cdr alist))))
   (car alist))
index c72eec8..dd3f135 100644 (file)
   (test (equal (assoc  1 alist) '(1 . 2)))
   (test (equal (rassoc 2 alist) '(1 . 2)))
   (test (not   (assoc  2 alist)))
-  (test (not   (rassoc 1 alist))))
+  (test (not   (rassoc 1 alist)))
+  (test (equal (assoc 3 alist :test-not #'=) '(1 . 2)))
+  (test (equal (assoc 1 alist :key (lambda (x) (/ x 3))) '(3 . 4))))
 
 ; MEMBER
 (test (equal (member 2 '(1 2 3)) '(2 3)))