gpt4 book ai didi

common-lisp - 如何在 lisp 中随机播放列表?

转载 作者:行者123 更新时间:2023-12-03 15:45:46 24 4
gpt4 key购买 nike

这是一个非常简单的程序,它只是将输入作为一个混洗过的列表返回。我用python编写了这个程序。现在我想把这个程序转换成 lisp 代码。但我不能。我如何用 lisp 写下这个程序?

def my_shuffle(a, b, c, d):
return [b, c, d, a]

我尝试了以下代码,但发生错误。
(defun my_shuffle (a b c d) (list b c d a))

最佳答案

这里有几件事我认为需要指出。首先,您提供的代码是正确的,但会随机排列一个列表,显示您通过的四种算法的新列表,并且顺序始终相同。首先shuffle一个序列是:

generating a random permutation of a finite sequence



从维基百科你可以找到几种算法:

https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

也在 rosseta code有一个 knuth shuffle 的实现:
(defun nshuffle (sequence)
(loop for i from (length sequence) downto 2
do (rotatef (elt sequence (random i))
(elt sequence (1- i))))
sequence)

然后,如果您在 repl 中应用它:
CL-USER> (nshuffle (list 1 2 3 4))
(3 1 4 2)
CL-USER> (nshuffle (list 1 2 3 4))
(3 1 2 4)

注意同一列表中有两个不同的结果!!! (也可能发生同样的情况,因为是随机顺序)

在 python 中,有一些构建算法:

https://docs.python.org/3/library/random.html#random.shuffle

也在 Common lisp 图书馆 Alexandria 中:
CL-USER> (ql:quickload :alexandria)
To load "alexandria":
Load 1 ASDF system:
alexandria
; Loading "alexandria"

(:ALEXANDRIA)
CL-USER> (alexandria:shuffle (list 1 2 3 4))
(3 2 4 1)

关于common-lisp - 如何在 lisp 中随机播放列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com