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

index c44907f..c0370b7 100644 (file)
       (setq alist (cdr alist))))
   (car alist))
 
-(defun rassoc (x alist &key (test #'eql))
+(defun rassoc (x alist &key key (test #'eql) (test #'eql testp)
+                 (test-not #'eql test-not-p))
   (while alist
-    (if (funcall test x (cdar alist))
+    (if (satisfies-test-p x (cdar 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 dd3f135..ac6ae90 100644 (file)
   (test (equal (rassoc 2 alist) '(1 . 2)))
   (test (not   (assoc  2 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))))
+  (test (equal (assoc  3 alist :test-not #'=) '(1 . 2)))
+  (test (equal (rassoc 4 alist :test-not #'=) '(1 . 2)))
+  (test (equal (assoc  1 alist :key (lambda (x) (/ x 3))) '(3 . 4)))
+  (test (equal (rassoc 2 alist :key (lambda (x) (/ x 2))) '(3 . 4)))) 
 
 ; MEMBER
 (test (equal (member 2 '(1 2 3)) '(2 3)))