Function: range-compress-list

range-compress-list is a byte-compiled function defined in range.el.gz.

Signature

(range-compress-list NUMBERS)

Documentation

Convert a sorted list of numbers to a range list.

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/range.el.gz
(defun range-compress-list (numbers)
  "Convert a sorted list of numbers to a range list."
  (let ((first (car numbers))
	(last (car numbers))
	result)
    (cond
     ((null numbers)
      nil)
     ((not (listp (cdr numbers)))
      numbers)
     (t
      (while numbers
	(cond ((= last (car numbers)) nil)   ;Omit duplicated number
	      ((= (1+ last) (car numbers))   ;Still in sequence
	       (setq last (car numbers)))
	      (t			;End of one sequence
	       (setq result
		     (cons (if (= first last) first
			     (cons first last))
			   result))
	       (setq first (car numbers))
	       (setq last  (car numbers))))
	(setq numbers (cdr numbers)))
      (nreverse (cons (if (= first last) first (cons first last))
		      result))))))