Range extraction: Difference between revisions

Emacs Lisp: Improve formatting
(Added solution for Action!)
(Emacs Lisp: Improve formatting)
Line 1,707:
 
=={{header|Emacs Lisp}}==
 
===version 1===
{{libheader|Gnus}}
<lang Emacs Lisp}>
<lang Lisp>(require 'gnus-range)
 
(defun rangext (lst)
(mapconcat (lambda (item)
(if (consp item)
(if (= (+ 1 (car item) ) (cdr item) )
(format "%d,%d" (car item) (cdr item) )
(format "%d-%d" (car item) (cdr item) ))
(format "%d" item)))
(gnus-compress-sequence lst)
","))
 
(insert (rangext '(0 1 2 4 6 7 8 11 12 14
15 16 17 18 19 20 21 22 23 24
25 27 28 29 30 31 32 33 35 36
37 38 39) ))
;; => "0-2,4,6-8,11,12,14-25,27-33,35-39"</lang>
</lang>
 
Vanilla:
<b>Output:</b>
<lang Lisp>(setq max-lisp-eval-depth 10000)
<pre>
0-2,4,6-8,11,12,14-25,27-33,35-39
</pre>
 
===version 2===
<lang Emacs Lisp}>
(setq max-lisp-eval-depth 10000)
 
(defun ab (a ls)
(if ls (if (= (+ a 1) (car ls) )
(abc a (car ls) (cdr ls) )
(format "%d,%s" a (ab (car ls) (cdr ls) )))
(format "%d" a) ))
 
(defun abc (a b ls)
(if ls (if (= (+ b 1) (car ls) )
(abcd a (car ls) (cdr ls) )
(format "%d,%d,%s" a b (ab (car ls) (cdr ls) )))
(format "%d,%d" a b) ))
 
(defun abcd (a c ls)
(if ls (if (= (+ c 1) (car ls) )
(abcd a (car ls) (cdr ls) )
(format "%d-%d,%s" a c (ab (car ls) (cdr ls) )))
(format "%d-%d" a c) ))
 
(defun rangext (ls)
(if ls (ab (car ls) (cdr ls) ) ""))
 
(insert (rangext '(0 1 2 4 6 7 8 11 12 14
15 16 17 18 19 20 21 22 23 24
25 27 28 29 30 31 32 33 35 36
37 38 39) ))
;; => "0-2,4,6-8,11,12,14-25,27-33,35-39"</lang>
</lang>
 
<b>Output:</b>
<pre>
0-2,4,6-8,11,12,14-25,27-33,35-39
</pre>
 
=={{header|Erlang}}==
Anonymous user