Perhaps slightly quicker:
(defun LM:ListOccurrences ( lst / out x )
;; © Lee Mac 2010
(while
(progn
(setq out
(cons
(list
(- (length lst)
(length
(setq lst
(vl-remove (setq x (car lst)) lst)
)
)
)
x
)
out
)
)
lst
)
)
(vl-sort out '(lambda ( a b ) (< (caadr a) (caadr b))))
)
Benchmarking .................Elapsed milliseconds / relative speed for 16384 iteration(s):
(LM:LISTOCCURRENCES LST).....1389 / 1.44 <fastest>
(FUN LST)....................1996 / 1.00 <slowest>