【问题标题】:list with initial-element are start from 99 to 0 in Lisp在 Lisp 中具有初始元素的列表从 99 到 0 开始
【发布时间】:2019-11-25 20:30:01
【问题描述】:

函数接受一个正数并创建一个介于 0(包括)和作为参数传递的数字(不包括)之间的所有数字的列表。默认为 100

(defun list-numbers (&optional (n 100))
  (mapcar #'abs (make-list n :initial-element (- n 1))))

如果你想看结果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 到 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)

【问题讨论】:

  • make-list 是一个普通函数; (- n 1) 表达式是一个普通的参数表达式,它被简化为传递给 make-list 的单个值;在这种情况下99make-list 创建一个列表,其中填充了此初始值的重复。可能它最常用于用零填充列表,nilt
  • 你说得对,再次感谢

标签: lisp common-lisp


【解决方案1】:
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)

【讨论】:

猜你喜欢
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多