]> git.eshelyaron.com Git - emacs.git/commitdiff
(assoc-default): Rewrite not to use dolist.
authorRichard M. Stallman <rms@gnu.org>
Sat, 8 Aug 1998 23:07:06 +0000 (23:07 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 8 Aug 1998 23:07:06 +0000 (23:07 +0000)
lisp/subr.el

index b80df9423f10101a346d86be3d3ec23d2b1e7b6e..3181b5f29a187b8dcfd5682d429eaf2cac8be35c 100644 (file)
@@ -94,17 +94,23 @@ If N is bigger than the length of X, return X."
       (setq x (cdr x)))
     x))
 
-(defun assoc-default (el alist test default)
-  "Find object EL in a pseudo-alist ALIST.
-ALIST is a list of conses or objects.  Each element (or the element's
-car, if it. is a cons) is compared with EL by calling TEST.
-If TEST returns non-nil, the element matches;
-then `assoc-default' returns the cdr of the element (if it is a cons),
+(defun assoc-default (key alist &optional test default)
+  "Find object KEY in a pseudo-alist ALIST.
+ALIST is a list of conses or objects.  Each element (or the element's car,
+if it is a cons) is compared with KEY by evaluating (TEST (car elt) KEY).
+If that is non-nil, the element matches;
+then `assoc-default' returns the element's cdr, if it is a cons,
 or DEFAULT if the element is not a cons.
-If no element matches, the value is nil."
-  (dolist (rr alist)
-    (when (funcall test el (if (consp rr) (car rr) rr))
-      (return (if (consp rr) (cdr rr) default)))))
+
+If no element matches, the value is nil.
+If TEST is omitted or nil, `equal' is used."
+  (let (found (tail alist) value)
+    (while (and tail (not found))
+      (let ((elt (car tail)))
+       (when (funcall (or test 'equal) (if (consp elt) (car elt) elt) key)
+         (setq found t value (if (consp elt) (cdr elt) default))))
+      (setq tail (cdr tail)))
+    value))
 \f
 ;;;; Keymap support.