concatr ::Integer -> [[Integer]] -> [[Integer]]
concatr x (y) = [x] : y
concatr x (y:ys) = concatr x y: concatr x ys
我试过这么多的组合,我的头开始受伤。我究竟做错了什么?我只想要一个整数放入传入列表的每个子列表中。追加一个元素到列表中的每个子列表的开头
concatr ::Integer -> [[Integer]] -> [[Integer]]
concatr x (y) = [x] : y
concatr x (y:ys) = concatr x y: concatr x ys
我试过这么多的组合,我的头开始受伤。我究竟做错了什么?我只想要一个整数放入传入列表的每个子列表中。追加一个元素到列表中的每个子列表的开头
如果你想避免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]
。
请注意,对于发布的“解决方案”,第一个模式总是匹配('concatr x(y)== concatr x y'),所以这总是等于'[[x],rest或原始列表]'。您必须解构原始列表,如您在第二种情况下所做的那样(但未使用'(x:y)'而不是'concatr x y')并终止于空案例'concatr x []'。 –
对不起,在提到问题中提出的代码时,我说“发布的解决方案”。这可能令人困惑。 –