Idiomatic Lisp创建排序随机数列表的方法?

时间:2015-10-07 23:37:54

标签: common-lisp idiomatic

我想了解在Common Lisp中创建随机数排序列表的常用方法是什么。在Clojure中,它非常简单:

(sort (take 10 (repeatedly #(rand 10))))

我发现在CL中有以下作品:

(sort (loop for n below 10 collect (random 10)) #'<)

但也不读。是否有更清洁的方式来表达同样的事情?

2 个答案:

答案 0 :(得分:7)

几乎:

(sort (loop repeat 10 collect (random 10)) #'<)

答案 1 :(得分:2)

我认为sds's answer在这里是一个非常好的选择,但也有可能使用有用的map-into,如果您需要这么做,这可能很有价值,并且可以重用您现有的一个列表(或向量)。它还具有将列表生成代码与随机数生成代码分离的优点。如果您需要增加列表中元素的数量,则不必修改排序或随机数生成代码。

(sort (map-into (make-list 10) #'(lambda () (random 10))) '<)
;=> (0 2 2 2 4 5 6 6 8 9)
(let ((l (make-list 10)))
  (sort (map-into l #'(lambda () (random 10))) '<))
;=> (1 1 3 3 4 6 7 8 8 9)