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 []'。 –
對不起,在提到問題中提出的代碼時,我說「發佈的解決方案」。這可能令人困惑。 –