我正在尝试在Ocaml中实现以下程序:
编写一个shuffle : α list → α list → α list
过程,该过程将返回一个列表,其中包含根据以下规则洗牌的2个列表中的元素:
shuffle [5; 7; 0; 5] [3; 2; 8; 9; 3]
的示例输出:
[5; 3; 2; 7; 8; 9; 0; 3; 5]
[3; 5; 2; 7; 8; 0; 9; 5; 3]
我知道如何实现一个简单的shuffle函数(取自here):
let shuffle d =
let nd = List.map (fun c -> (Random.bits (), c)) d in
let sond = List.sort compare nd in
List.map snd sond
你能否告诉我如何从那里出发?
答案 0 :(得分:1)
这是一个符合前两个要求的简单随机散布:
let shuffle a b =
let rec loop a b = match a, b with
| [], r
| r, [] -> r
| x::xs, y::ys ->
if Random.bool () then x::loop xs b
else y::loop a ys in
loop a b
看看你是否可以调整选择哪个列表来获取元素的方式,以满足第三个要求。您可能希望在开始之前收集有关列表的一些信息,然后您可以参与决策。