(defun count-unique-values (list)
  (let ((map (make-hash-table)))
    (loop for x in list
       do (setf (gethash x map) 1))
        (hash-table-count map)))

(defun count-unique-values-2 (list)
  (let ((sorted (sort (copy-list list) #'>))
        (unique 0)
        last)
    (dolist (x sorted)
      (unless (eql last x)
        (incf unique)
        (setf last x)))
    unique))


(defun test (list)
  (format t "Testing ~a: ~a ~%" list (count-unique-values-2 list)))

(progn
  (test '(1 2 3))
  (test '(1 2 3 3))
  (test '(1 1 2 2 3 3)))



