创建排序随机数列表的惯用 Lisp 方法?
Idiomatic Lisp way to create a list of sorted random numbers?
我想了解在 Common Lisp 中创建随机数排序列表的普遍接受方式是什么。在 Clojure 中,它非常简单:
(sort (take 10 (repeatedly #(rand 10))))
我发现在 CL 中有以下工作:
(sort (loop for n below 10 collect (random 10)) #'<)
但读得不太好。有没有更简洁的方式来表达同样的事情?
几乎:
(sort (loop repeat 10 collect (random 10)) #'<)
我认为 is a pretty good choice here, but there's also the potential to use the helpful 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)
我想了解在 Common Lisp 中创建随机数排序列表的普遍接受方式是什么。在 Clojure 中,它非常简单:
(sort (take 10 (repeatedly #(rand 10))))
我发现在 CL 中有以下工作:
(sort (loop for n below 10 collect (random 10)) #'<)
但读得不太好。有没有更简洁的方式来表达同样的事情?
几乎:
(sort (loop repeat 10 collect (random 10)) #'<)
我认为
(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)