我是Haskell的新手。 例如 [[1],[2,2],[3,3,3]]
答案 0 :(得分:8)
您可以通过以下方式构建包含 k
次te项x
的列表:
replicate k x
现在我们要将原始列表中的每个项x
映射到包含x
,x
次的列表。我们可以把它写成:
replic the_list = map helper the_list
where helper x = replicate x x
或者使用 lambda表达式:
replic the_list = map (\x -> replicate x x) the_list
或者我们可以使用join :: Monad m => m (m a) -> m a
函数:
import Control.Monad(join)
replic the_list = map (join replicate) the_list
我们也可以在这里使用 eta-reducation :在函数子句的头部和主体中删除the_list
:
import Control.Monad(join)
replic :: [Int] -> [[Int]]
replic = map (join replicate)
答案 1 :(得分:1)
这样的事情怎么样?
replicate' :: [Int] -> [[Int]]
replicate' l = map (\n -> take n (repeat n)) l
replicate' [1, 2, 3] -- [[1],[2,2],[3,3,3]]