Tino Calancha writes: > Do you mean something like this? > > { > Lisp_Object tail = list; > Lisp_Object fn = NILP (testfn) ? Qequal : testfn; > FOR_EACH_TAIL (tail) > { > Lisp_Object car = XCAR (tail); > if (CONSP (car) && !NILP (call2 (fn, (XCAR (car)), key))) > return car; > } > > CHECK_LIST_END (tail, list); > return Qnil; > } > > ;; This is shorter but now the default case, because the call2, is less > ;; efficient than just using Fequal, right? I like your version more, but I also thought that it would be slower for the default case. I ran benchmark-run with the first version: (setq alist (mapcar (lambda (e) `(,(intern e) . ,e)) (locate-file-completion-table load-path (get-load-suffixes) "" nil t))) (benchmark-run (assoc 'absent alist)) (0.00023356 0 0.0) (0.00016584 0 0.0) (0.000165243 0 0.0) (0.000164741 0 0.0) (0.000240754 0 0.0) (0.000104102 0 0.0) and with your version: (0.000556587 0 0.0) (0.000238677 0 0.0) (0.000498506 0 0.0) (0.000527675 0 0.0) (0.00064989 0 0.0) (0.000520543 0 0.0) Cheers, Nico