From Newsgroup: comp.lang.lisp
Alan Crowe wrote:
(defun occurrences-CL-condensed (list)
(sort (loop for x in (remove-duplicates list)
collect (cons x (count x list)))
#'> :key #'cdr))
Gauche Scheme
(define (occurrences-GS-condensed List)
(sort
(map
(^x (cons x (count (pa$ equal? x) List)))
(delete-duplicates List))
> cdr))
Testing.
(occurrences-GS-condensed '(a b c d e f b c d e b c d))
===>
((b . 3) (c . 3) (d . 3) (e . 2) (a . 1) (f . 1))
Shorter yet.
(define (occurrences-GS-condensed List)
(sort
(map
(^x (cons x (count (is x) List)))
(delete-duplicates List))
> cdr))
Given:
(define is
(case-lambda
[(x) (lambda(y) (equal? y x))]
[(pred x) (lambda(y) (pred y x))]
[(pred key x) (lambda(y) (pred (key y) x))]))
--- Synchronet 3.21a-Linux NewsLink 1.2