Haskell:f n返回[1..n]中n个元素的列表

时间:2018-01-03 16:10:29

标签: algorithm haskell

我需要一个函数f :: (Integral n) => n -> [[n]]

返回的列表应包含所有长度为n的列表,其中所有元素都来自[1..n]

示例:

f 2 = [[1,1],[1,2],[2,1],[2,2]]

对于常量n s来说,这是一个简单的问题:

f2 = [[a, b] | a <- [1..2], b <- [1..2]]
f3 = [[a, b, c] | a <- [1..3], b <- [1..3], c <- [1..3]]
f4 = [[a, b, c, d] | a <- [1..4], b <- [1..4], c <- [1..4], d <- [1..4]]

3 个答案:

答案 0 :(得分:7)

一个解决方案可以

f n = sequence . replicate n $ [1..n]

请注意,f 10将包含10 ^ 10个元素

答案 1 :(得分:6)

另一种方法可能是:

Prelude> import Control.Monad
Prelude Control.Monad> f n = replicateM n [1..n]
Prelude Control.Monad> f 2
[[1,1],[1,2],[2,1],[2,2]]

答案 2 :(得分:0)

包含优秀prereq库的解决方案:

combinat