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

在Lisp中,具有初始元素的列表从99开始到0,lisp,common-lisp,Lisp,Common Lisp,函数,该函数接受一个正数,并创建一个0(包含)和作为参数传递的数字(排除)之间的所有数字的列表。默认值为100 (defun list-numbers (&optional (n 100)) (mapcar #'abs (make-list n :initial-element (- n 1)))) 如果你想看到结果 (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 9

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

(defun list-numbers (&optional (n 100))
  (mapcar #'abs (make-list n :initial-element (- n 1))))
如果你想看到结果

(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 92 91 90 89 88 87 86…)。。。。 9 8 7 6 5 4 3 2 1 0)


谢谢@Rainer,事实上,我不需要使用生成列表,你的答案是我需要,也许你可以在其他问题上帮助我,比如这个问题,看到的结果是,所有实现与你的答案,我需要交换或洗牌没有重复,
生成列表
是一个普通的功能;
(-n1)
表达式是一个普通的参数表达式,它被简化为一个值,并传递给
生成列表
;在这种情况下,
99
<代码>生成列表创建一个包含此初始值重复的列表。可能它最常用于在列表中填入零、
nil
t
。你说得对,再次感谢
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)
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)