我想,給定一個列表,創建於哈斯克爾的元素的隨機排列。我已經嘗試在Javascript中的算法,它的工作。我對Haskell很新,所以我可能沒有看到什麼。我非常肯定,我只接收單個元素而不是列表,只有一個元素,這使得我的程序崩潰。我在之前的練習中遇到過這個問題,但仍不知道如何解決。隨機化列表在Haskell
該算法將列表中,直到它得到一個元素。如果合併列表的話,有50%的可能性,另外50%的可能性將其合併。
這是代碼:
-- A randomly chosen, program-scoped constant from the range [1 .. 10]
randomInt :: Int
randomInt = unsafePerformIO (getStdRandom (randomR (1, 10)))
-- Divides the list in half
divideList :: [a] -> ([a], [a])
divideList list = splitAt ((length list) `div` 2) list
-- Given a list, it creates a new one with the elements of said list
randomizeList :: Eq a => a -> [a]
randomizeList list = do
let lists = (divideList list) in
if (length list) > 1
then if (randomInt > 5)
then (randomizeList (fst lists) : randomizeList (snd lists))
else (randomizeList (snd lists) : randomizeList (fst lists))
else [list]
這裏是Javascript代碼的情況下,它可以幫助:提前
function divideList(list){
const length = list.length/2;
return {fst: list.splice(0, length), snd: list};
}
function randomizeList(list) {
if(list.length == 1) return list;
const lists = divideList(list);
if(Math.random() > 0.5) return randomizeList(lists.fst).concat(randomizeList(lists.snd));
else return randomizeList(lists.snd).concat(randomizeList(lists.fst));
}
感謝
您鍵入簽名不正確'randomizeList ::公式A => A - > [一]'接受一個元素並返回一個列表,你可能想''a] - > [a]'。我也不明白爲什麼需要'Eq' – puhlen