X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Flist.lisp;h=99e6e7adb84361400b55e91fbefe273646180694;hb=74568bb8cdadfcb6bf5429976b92f3afb748b0c2;hp=0bd484649a9e5e0d1c353a777ebbe249424c6e3f;hpb=8de6bd35930e6f3c3e37b9800955faf81882971d;p=jscl.git diff --git a/src/list.lisp b/src/list.lisp index 0bd4846..99e6e7a 100644 --- a/src/list.lisp +++ b/src/list.lisp @@ -72,17 +72,16 @@ (defun cadr (x) (car (cdr x))) (defun cdar (x) (cdr (car x))) (defun cddr (x) (cdr (cdr x))) -(defun cadar (x) (car (cdr (car x)))) -(defun caddr (x) (car (cdr (cdr x)))) -(defun cdddr (x) (cdr (cdr (cdr x)))) -(defun cadddr (x) (car (cdr (cdr (cdr x))))) - -(defun cadar (x) (car (cdar x))) -(defun caaar (x) (car (caar x))) -(defun caadr (x) (car (cadr x))) -(defun cdaar (x) (cdr (caar x))) -(defun cdadr (x) (cdr (cadr x))) -(defun cddar (x) (cdr (cdar x))) + +(defun caaar (x) (car (caar x))) +(defun caadr (x) (car (cadr x))) +(defun cadar (x) (car (cdar x))) +(defun caddr (x) (car (cddr x))) +(defun cdaar (x) (cdr (caar x))) +(defun cdadr (x) (cdr (cadr x))) +(defun cddar (x) (cdr (cdar x))) +(defun cdddr (x) (cdr (cddr x))) + (defun caaaar (x) (car (caaar x))) (defun caaadr (x) (car (caadr x))) (defun caadar (x) (car (cadar x))) @@ -90,6 +89,7 @@ (defun cadaar (x) (car (cdaar x))) (defun cadadr (x) (car (cdadr x))) (defun caddar (x) (car (cddar x))) +(defun cadddr (x) (car (cdddr x))) (defun cdaaar (x) (cdr (caaar x))) (defun cdaadr (x) (cdr (caadr x))) (defun cdadar (x) (cdr (cadar x))) @@ -161,6 +161,13 @@ (rplaca tail (cdar tail))) (collect (apply func elems)))))))) +(defun mapc (func &rest lists) + (do* ((elems (map1 #'car lists) (map1 #'car lists-rest)) + (lists-rest (map1 #'cdr lists) (map1 #'cdr lists-rest))) + ((dolist (x elems) (when (null x) (return t))) + (car lists)) + (apply func elems))) + (defun last (x) (while (consp (cdr x)) (setq x (cdr x))) @@ -265,6 +272,11 @@ (rplacd 2nd 3rd))) +(defun adjoin (item list &key (test #'eql) (key #'identity)) + (if (member item list :key key :test test) + list + (cons item list))) + (defun intersection (list1 list2 &key (test #'eql) (key #'identity)) (let ((new-list ())) (dolist (x list1)