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

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

4

2 回答 2

8

您可以使用该map功能。

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

Eta reduce 的简洁解决方案:

concatr x = map (x:)
于 2012-05-13T00:58:24.513 回答
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].

于 2012-05-13T15:55:23.943 回答