【发布时间】:2014-06-08 19:36:53
【问题描述】:
当我询问如何Get numbers for the lottery 时,我得到了创建一个随机列表函数的提示。所以我试着这样做,我什至得到了它的工作。
我当前的实现如下所示:
(defun shuffle (list)
(let ((len (length list)))
(loop repeat len
do
(rotatef
(nth (random len) list)
(nth (random len) list))
finally
return list)))
好消息是它有效:
(shuffle '(1 2 3 4 5 6))
;; => (3 1 4 2 6 5)
坏消息是我收到一条错误消息:
警告:LOOP:紧跟在 FINALLY 之后的循环关键字:CLtL2 允许,ANSI CL 禁止。
很遗憾,我不明白。为什么它告诉我loop 立即出现在finally 之后?而且,导致这种情况的代码有什么问题?
有没有更好的方法来表达这个?
【问题讨论】:
-
请记住,正如所写的那样,这个函数最终会导致您的彩票号码分布相当不均匀。
标签: lisp common-lisp