2011-01-13 12 views
0

これは、中括弧を開き、中括弧で囲んでいるシーケンスをランダムにしたいと考えています。ここに私の(部分)コードです:Haskellで1つのランダム変数を複数回使用する

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 

それは、各シャッフルのための新しいordを生成するのでそれは動作しません。 ordを覚えて両方のシャッフルに使用するにはどうしたらいいですか?

+0

あなたのコードが部分的ではない場合は、あなたの質問に答える方が簡単だと思います(少なくとも正しい構文です)。今はあなたの問題が何であるか正確に見るのは難しいです。 – HaskellElephant

答えて

0

別々にシャッフルしないでください。

完了したらzipペダルシーケンスとunzipをシャッフルします。

0

OlegのProvably perfect shuffle algorithmsまたはSystem.Random.Shuffleの実装を見たことがありますか?

(非常に不完全な)コードを再読み込みすると、となる可能性があり、周囲のコードについていくつかの前提があります。私たちが何が間違っているのかを判断するために、もっと多くを示してください。

脇に、map fst . sortBy (comparing `on` fst) . zip xsまたはmap fst . sortWith fst . zip xsを使用すると、1つのリストを別のリストで注文することがより明確に表現されます。

関連する問題