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 ys = map (x:) ys
イータは簡潔なソリューションを減らす:
concatr :: Integer -> [[Integer]] -> [[Integer]]
concatr x [] = []
concatr x (y:ys) = (x:y):concatr x ys
二例:あなたはmap
を避けたい場合は
concatr x = map (x:)
y:ys
の場合、新しいヘッドはx:y
であり、残りの部分は再帰的にconcatr
と呼びます。例:concatr 1 [[0],[2]]
は[[1,0],[1,2]
です。
投稿された "解"の場合、最初のパターンは常に( 'concatr x(y)== concatr x y')と一致するので、これは常に' [[x]、rest or original list] 'に等しくなります。 (concatr x y'の代わりに '(x:y)'を使用するのに失敗した)2番目のケースでしようとしたように元のリストを解体し、ヌルの場合 'concatr x []'で終了する必要があります。 –
申し訳ありませんが、私は質問に提案されたコードを参照するとき、 "投稿されたソリューション"と言った。それはおそらく混乱します。 –