习惯的Lisp方式创建排序随机数列表



我想找出在Common Lisp中创建随机数排序列表的常用方法。在Clojure中非常简单:

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

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

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

,但读取效果不佳。是否有更简洁的方式来表达同样的事情?

Almost:

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

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

(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)