Skillnad (från version 14 till rådande version)
Sammanfattning: Rollback to 2008-09-05 00:16 UTC
Information om ändring är inte tillgänglig.Starting with emacs version 22, sequences of numbers can be generated using the number-sequence function.
(number-sequence 4)
=> (4) (number-sequence 1 9)
=> (1 2 3 4 5 6 7 8 9) (number-sequence 1 16 2)
=> (1 3 5 7 9 11 13 15)For earlier versions of emacs, here are some small hacks to create a list of integers, in a given range.
Here is a recursive solution:
(defun int-list (x y)
"Returns a list of integers in the range of x and y."
(setq list
(cond ((< x y) (new-int-list y x ())
t (new-int-list x y ()))))) (defun new-int-list (x y list)
(let ((mylist list))
(setq list (add-to-int-list x y list))
(if (equal mylist list)
list
(new-int-list x (- y 1) list)))) (defun add-to-int-list (x y list)
(cond ((<= x y)
(append (list y) list))
(t list)))Here is a more compact recursive sollution:
(defun int-list (x y &rest list)
"Returns a list of integers in the range of x and y."
(let ((i (min x y)) (j (max x y)))
(if (= i j)
(append (list j) (car list))
(int-list i (- j 1) (append (list j) (car list))))))Here’s a shorter way:
(defun int-list (x y)
(let (list)
(dotimes (i (1+ (- y x)))
(push (+ x i) list))
(nreverse list)))Here is the same, modified to support y > x:
(defun int-list (i j)
"Returns a list of integers in the range of x and y."
(let ((x (min i j))
(y (max i j)))
(let (list)
(dotimes (i (1+ (- y x)))
(push (+ x i) list))
(nreverse list))))Lets play golf:
(require 'cl)
(defun int-list (x y)
(loop for i from (min x y) to (max x y) collecting i))