将元素附加到列表中每个子列表的开头

时间:2012-05-13 00:51:21

标签: haskell

concatr ::Integer -> [[Integer]] -> [[Integer]]
concatr x (y)    = [x] : y
concatr x (y:ys) = concatr x y:  concatr x ys

我已经尝试了很多这样的组合,以至于我的头开始受伤了。我究竟做错了什么?我只想在传入的列表的每个子列表中放入一个整数。

2 个答案:

答案 0 :(得分:8)

您可以使用map功能。

concatr :: Integer -> [[Integer]] -> [[Integer]]
concatr x ys = map (x:) ys

简化为简洁解决方案:

concatr x = map (x:)

答案 1 :(得分:0)

如果您想避免map

concatr :: Integer -> [[Integer]] -> [[Integer]]
concatr x []     = []
concatr x (y:ys) = (x:y):concatr x ys

两种情况:

  • 如果列表为空,我们返回一个空列表。
  • 如果列表为y:ys,则新头部为x:y,我们会在剩余部分上递归concatr

示例:concatr 1 [[0],[2]][[1,0],[1,2]