@rajeshpatnaik2001 hi,
here is my 'fun' version
it also will run on unsorted or reversed list even with duplicate items.
enjoy
moshe
(defun make_range (no_list / const_subl build_range ; local functions
no_list no data_range subL0 subL1)
; construct sublist
(defun const_subL (no subL0)
(if (= (- no (car subL0)) 1)
(reverse (cons no subL0))
)
); const_subL
; construct result
(defun build_range ()
(mapcar
'(lambda (subL)
(cond
((= (length subL) 1)
(itoa (car subL))
); case
( t
(strcat (itoa (car subL)) "-" (itoa (last subL)))
); case
); cond
)
data_range
)
); build_range
; here start make_range
(setq no (apply 'min no_list))
(setq data_range (list (list no)))
(while (setq no_list (vl-remove no no_list))
(setq no (apply 'min no_list))
(setq subL0 (car data_range))
(if (setq subL1 (const_subL no (reverse subL0)))
(progn
(setq data_range (vl-remove subL0 data_range))
(setq data_range (cons subL1 data_range))
); progn
(setq data_range (cons (list no) data_range))
); if
); while
(reverse (build_range))
); make_range