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))