Lisp中具有初始元素的列表从99开始到0

Ren*_*uza 3 lisp common-lisp

该函数接受一个正数,并创建一个包含0(包括)和作为参数传递的数字(排除)之间的所有数字的列表。默认是100

(defun list-numbers (&optional (n 100))
  (mapcar #'abs (make-list n :initial-element (- n 1))))
Run Code Online (Sandbox Code Playgroud)

如果您想查看结果https://ideone.com/Jbz5u3

(99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99)

但我的目标是创建一个简单的列表,使初始元素从99到0的值开始

(99 98 97 96 95 94 93 92 91 90 89 88 87 86 .... 9 8 7 6 5 4 3 2 1 0)

Rai*_*wig 5

CL-USER 160 > (loop for i from 99 downto 0 collect i)
(99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)
Run Code Online (Sandbox Code Playgroud)

要么

CL-USER 167 > (do* ((i      0        (+ i 1))
                    (result (list i) (cons i result)))
                   ((= i 99) result))
(99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0)
Run Code Online (Sandbox Code Playgroud)