0
考虑列表清单列表乘以嵌套列表
thisList = [[1], [1, 1], [1, 1, 1]]
我怎么会多thisList
,这样它会产生另一个列表
anotherList = [[1], [2, 2], [3, 3, 3]]
我所做的功能
reps = [1] : map (\ns -> head ns:ns) reps
哪产生thisList
感谢所有帮助
考虑列表清单列表乘以嵌套列表
thisList = [[1], [1, 1], [1, 1, 1]]
我怎么会多thisList
,这样它会产生另一个列表
anotherList = [[1], [2, 2], [3, 3, 3]]
我所做的功能
reps = [1] : map (\ns -> head ns:ns) reps
哪产生thisList
感谢所有帮助
你可以这样做:
zipWith (\x -> map (const x)) [1..] thisList
用法示例:
Prelude> let thisList = [[1], [1,1], [1,1,1]]
Prelude> zipWith (\x -> map (const x)) [1..] thisList
[[1],[2,2],[3,3,3]]
或者简单:
zipWith (map . const) [1..] thisList
这是很容易。 zipWith f as bs
相当于map (uncurry f) $ zip as bs
。因此,我们有:
zip [1..] thisList == [(1, [1]), (2, [1,1,]), (3, [1,1,1])]
然后我们应用f
每对等:
map (const 1) [1] == [const 1 1] == [1]
map (const 2) [1,1] == [const 2 1, const 2 1] == [2,2]
map (const 3) [1,1,1] == [const 3 1, const 3 1, const 3 1] == [3,3,3]
如果你的意思是长度n
的子表应该由长度n
的[n, n, ..., n]
更换,如:
thisList = [[1, 1], [1], [1], [1, 1, 1]]
result = [[2,2], [1], [1], [3,3,3]]
然后,你必须改变的办法:
map (\xs -> let len = length xs in replicate len len) thisList
示例:你为什么不使用`[1,2,3]`对列表符号
Prelude> let thisList = [[1, 1], [1], [1], [1, 1, 1]]
Prelude> map (\xs -> let len = length xs in replicate len len) thisList
[[2,2],[1],[1],[3,3,3]]
? –