LISP中是否存在一个函数,用于生成(0 1 2 3)
等整数序列?
我找到make-sequence
,但我没有找到如何制作整数序列。
我尝试了make-list
而没有。
我知道在Scheme中存在(build-list 5 (lambda (x) x))
。我尝试使用build-list
更改make-list
,但它无效。
一些想法?感谢
编辑:我需要make-list 5 ==> (0 1 2 3 4)
答案 0 :(得分:2)
完成<textarea>
:
loop
答案 1 :(得分:1)
Alexandria库,用于处理Common Lisp的任何符合实现,定义(iota 5)
=> (0 1 2 3 4)
:
(iota 3 :start 1 :step 1.0)
=> (1.0 2.0 3.0)
您还可以自定义开始和步骤:
map-iota
但是通常你不需要实际生成列表,你只想迭代给定的范围。这也是(map-iota #'print 3 :start 1 :step 1.0)
=> 3
:
(loop for i from 1.0 below 22 by 1.5 do (print i))
在这种情况下,您当然可以使用LOOP
:
do
您可以collect
取代iota
而不是{{1}}并获取列表;这比{{1}}更冗长,但更容易定制。
答案 2 :(得分:0)
让我们看看是否还能写出我头脑中的mac lisp:
(defun foo (num acc)
(if (eq num 0)
acc
(foo (- num 1) (cons num acc))))
(foo 5 nil)
应该是
(1 2 3 4 5)