From Newsgroup: comp.lang.lisp
Bill Atkins wrote:
(defun occurrences (list)
(let (result)
(dolist (x list)
(if (assoc x result)
(incf (cdr (assoc x result)))
(push (cons x 1) result)))
(sort result #'> :key #'cdr)))
Gauche Scheme:
(define (occurrences input)
;; Create table (association list).
(define result (map (cut cons <> 0) (delete-duplicates input)))
(dolist (x input) (inc! (cdr (assoc x result))))
(sort result > cdr))
(occurrences '(a b c d d d d c c b))
===>
((d . 4) (c . 3) (b . 2) (a . 1))
--- Synchronet 3.21d-Linux NewsLink 1.2