Racket 球拍:在两个不同的函数中从列表中获取相同的随机元素

Racket 球拍:在两个不同的函数中从列表中获取相同的随机元素,racket,Racket,我想从列表1中选取一个随机元素,将其从列表1中删除,然后将其添加到列表2中。 (定义列表1'(1 2 3 4 5 6 7 8) (定义列表2’(9 10) 现在我的问题是,我使用了两个函数来更新列表。 list1将删除一个随机元素,list2将追加一个随机元素,但并不总是相同的元素。 如何使list2添加元素,删除list1,然后重复这些步骤,直到list1为空? 提前多谢 #朗球拍 (定义列表1’(1 2 3 4 5 6 7 8)) (定义列表2’(9-10)) (定义(选择随机列表) (汽车

我想从列表1中选取一个随机元素,将其从列表1中删除,然后将其添加到列表2中。
(定义列表1'(1 2 3 4 5 6 7 8)
(定义列表2’(9 10)

现在我的问题是,我使用了两个函数来更新列表。
list1将删除一个随机元素,list2将追加一个随机元素,但并不总是相同的元素。
如何使list2添加元素,删除list1,然后重复这些步骤,直到list1为空?
提前多谢

#朗球拍
(定义列表1’(1 2 3 4 5 6 7 8))
(定义列表2’(9-10))
(定义(选择随机列表)
(汽车(洗牌列表)))
(定义(更新列表)
(删除(选择随机列表)列表)
(定义(添加列表1目标列表)
(附加(列表(选择随机列表1))目标列表)

在多个位置随机选择一个元素的方法是在功能之外:

(定义(选择随机lst)
(汽车(洗牌lst)))
现在您需要使用元素来完成您的工作:

(定义(删除元素lst)
(拆下元件(lst))
(定义(添加元素lst)
(第1部分)
因此,在循环中,您可以执行以下操作:

(让循环((列表1’(1 2 3 4 5 6 7 8 9 10))
(列表2’())
(如果(空?列表1)
清单2
(let((元素(选择随机列表1)))
(循环(删除元素列表1)
(添加元素列表2(()()))
; ==> (2 1 5 4 10 7 6 8 9 3)
请注意,
remove element
add element
实际上只是
remove
cons
的同义词。它们不添加任何值,而是更改名称。因此,您可以省略它们:

(让循环((列表1’(1 2 3 4 5 6 7 8 9 10))
(列表2’())
(如果(空?列表1)
清单2
(let((元素(选择随机列表1)))
(循环(删除元素列表1)
(cons元素列表2(()()))

实际上,这只是一种非常复杂的方式来执行
(shuffle'(12345678910))

是否将索引同时传递给这两个元素?您需要在删除之前进行复制。这将有助于查看一些代码。添加的代码。我洗牌列表,然后从列表中取出第一个元素。问题是,每当我调用函数时,它都是随机元素。“删除之前复制”是什么意思?非常感谢你的回答。循环看起来很棒,我仍然缺少的一件事是如何访问列表,比如说在一个循环之后。(删除元素lst)=>'(1 3 4 5 6 7 8 9 10)和(添加元素lst)=>'(2)。@User91在
循环
调用之前的
let
正文中,但它不包括基本情况。