我想使所有可能的子組與2個列表的組合。這裏,不只是這一個功能:列表的排列--Haskell
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
[[a,b]]
如果傳遞「ABC」這個功能,它返回:
["aa","ab","ac","ba","bb","bc","ca","cb","cc"]
同樣的方法的簡單修改可以返回的3所列出的組合而不是兩個。通過「ABC」作爲參數的
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
c <- na
[[a,b,c]]
結果:
["aaa","aab","aac","aba","abb","abc","aca","acb","acc",
"baa","bab","bac","bba","bbb","bbc","bca","bcb","bcc",
"caa","cab","cac","cba","cbb","cbc","cca","ccb","ccc"]
什麼讓它擴展到列表中任意數量的最簡單的方法?下面是類型聲明應該是什麼樣子:
getCombinations :: Int -> [a] -> [[a]]
您可以隨時嘗試使用hoogle:http://www.haskell.org/hoogle/?hoogle=Int+-%3E+[a]+-%3E+[[a]],它會將replicateM作爲第三個結果。 – sdcvvc 2012-01-08 18:00:34
謝謝sdcvvc,我不知道有可能像這樣查詢hoogle! – RooSoft 2012-01-08 18:16:42
從技術上講,這些是[置換](https://en.wikipedia.org/wiki/Permutation)不是[組合](https://en.wikipedia.org/wiki/Combination)。數學家將是迂腐的... – 2014-01-22 23:48:24