它想制作一个随机序列的开括号和匹配的闭括号序列。这是我的(部分)代码:
shuffle :: [a] -> IO [a]
ps xs ys = map snd . sort $ zip xs ys
opens = "[{("
closes = "]})"
parens = do
ord <- shuffle [0..length opens]
let os = ps ord opens
cs = reverse $ ps ord closes
它不起作用,因为它为每个shuffle生成一个新的ord
。如何让它记住ord
并将其用于两个shuffle?
答案 0 :(得分:0)
不要单独洗牌。
随机播放zip
ped序列和unzip
。
答案 1 :(得分:0)
您是否见过Oleg的Provably perfect shuffle algorithms或System.Random.Shuffle实施?
重新阅读(非常不完整的)代码后,似乎可能正确,对周围代码做出一些假设。请显示更多,以便我们确定可能出现的问题。
顺便说一句,使用map fst . sortBy (comparing `on` fst) . zip xs
或map fst . sortWith fst . zip xs
会更清楚地表明您的意图是按顺序排列一个列表。