Tôi muốn kết hợp tất cả các nhóm con có thể với 2 danh sách. Đây là một chức năng mà chỉ này:Các danh tiếng của một danh sách - Haskell
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
[[a,b]]
Nếu bạn vượt qua "abc" để chức năng này, nó sẽ trả về này:
["aa","ab","ac","ba","bb","bc","ca","cb","cc"]
Một thay đổi đơn giản trong những phương pháp tương tự có thể trở lại sự kết hợp của 3 liệt kê thay vì hai.
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
c <- na
[[a,b,c]]
Kết quả đi "abc" như một cuộc tranh cãi:
["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"]
cách đơn giản nhất để làm cho nó mở rộng đến một số tùy ý của danh sách là gì? Đây là những gì khai báo kiểu nên hình như:
getCombinations :: Int -> [a] -> [[a]]
Bạn luôn có thể thử sử dụng hoogle: http://www.haskell.org/hoogle/?hoogle=Int+-%3E+[a]+-%3E+[[a]], nó cung cấp bản saoM là kết quả thứ ba. – sdcvvc
Cảm ơn sdcvvc, tôi không biết có thể truy vấn hoogle như thế được không! – RooSoft
Về mặt kỹ thuật, đây là [Permutations] (https://en.wikipedia.org/wiki/Permutation) NOT [Combinations] (https://en.wikipedia.org/wiki/Combination). Các nhà toán học sẽ là người khổng lồ ... –