2012-05-13 11 views
2
concatr ::Integer -> [[Integer]] -> [[Integer]] 
concatr x (y) = [x] : y 
concatr x (y:ys) = concatr x y: concatr x ys 

私は頭が痛いほど多くの組み合わせを試みました。私は間違って何をしているのですか?私は、渡されたリストのすべてのサブリストに整数を入れるだけです。リスト内のすべてのサブリストの先頭に要素を追加する

+0

投稿された "解"の場合、最初のパターンは常に( 'concatr x(y)== concatr x y')と一致するので、これは常に' [[x]、rest or original list] 'に等しくなります。 (concatr x y'の代わりに '(x:y)'を使用するのに失敗した)2番目のケースでしようとしたように元のリストを解体し、ヌルの場合 'concatr x []'で終了する必要があります。 –

+0

申し訳ありませんが、私は質問に提案されたコードを参照するとき、 "投稿されたソリューション"と言った。それはおそらく混乱します。 –

答えて

8

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:) 
+1

私は少しリベラルな答えを出しました。 – pmr

+0

ありがとうございます。ユニークな解決策があるように聞こえることを意味しませんでした! – rotskoff

+5

「concatr = map」に行くことができます。 (point-less?)のスタイル付き関数のための ':(:)'を使用します。 – ScottWest

0

  • リストが空の場合、私たちは空のリストを返します。
  • リストがy:ysの場合、新しいヘッドはx:yであり、残りの部分は再帰的にconcatrと呼びます。

例:concatr 1 [[0],[2]][[1,0],[1,2]です。

関連する問題