我想了解在Common Lisp中创建随机数排序列表的常用方法是什么。在Clojure中,它非常简单:
(sort (take 10 (repeatedly #(rand 10))))
我发现在CL中有以下作品:
(sort (loop for n below 10 collect (random 10)) #'<)
但也不读。是否有更清洁的方式来表达同样的事情?
答案 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)