LISP - 整数序列

时间:2016-12-13 21:52:50

标签: list lisp

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)

之类的内容

3 个答案:

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