diff options
author | Richard M. Stallman <rms@gnu.org> | 1998-08-08 23:07:06 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1998-08-08 23:07:06 +0000 |
commit | 8a288450ca441821a47d2b0e8ca29a3b84130d64 (patch) | |
tree | 00b761b0d2337ed12819521109ffbd4d216904ff /lisp | |
parent | fdbd749a3fc1663bc0db36f63be5430de08bae39 (diff) | |
download | emacs-8a288450ca441821a47d2b0e8ca29a3b84130d64.tar.gz emacs-8a288450ca441821a47d2b0e8ca29a3b84130d64.tar.bz2 emacs-8a288450ca441821a47d2b0e8ca29a3b84130d64.zip |
(assoc-default): Rewrite not to use dolist.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/subr.el | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index b80df9423f1..3181b5f29a1 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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)) ;;;; Keymap support. |