fork download
  1. (defun count-unique-values (list)
  2.   (let ((map (make-hash-table)))
  3.     (loop for x in list
  4.        do (setf (gethash x map) 1))
  5.     (hash-table-count map)))
  6.  
  7. (defun count-unique-values-2 (list)
  8. (let ((sorted (sort (copy-list list) #'>))
  9. (unique 0)
  10. last)
  11. (dolist (x sorted)
  12. (unless (eql last x)
  13. (incf unique)
  14. (setf last x)))
  15. unique))
  16.  
  17.  
  18. (defun test (list)
  19. (format t "Testing ~a: ~a ~%" list (count-unique-values-2 list)))
  20.  
  21. (progn
  22. (test '(1 2 3))
  23. (test '(1 2 3 3))
  24. (test '(1 1 2 2 3 3)))
  25.  
  26.  
  27.  
  28.  
Success #stdin #stdout 0s 10528KB
stdin
Standard input is empty
stdout
Testing (1 2 3): 3 
Testing (1 2 3 3): 3 
Testing (1 1 2 2 3 3): 3