2017-08-28 12 views
0

行列内の要素の数を見つけることなので、私に緩みのビットカット:私はマトリックスを通過し、一致するすべてのリストを出力Haskellの関数を記述する必要がありますP私はHaskellの新人だ

を要素を(フィルタを使用する場合など)特定の要素に追加し、リストが別の要素と一致するかどうかを確認します。

checkMatrix :: Matrix a -> a -> [a] -> Bool 

フィルタを使用したバリエーションを試してみました!!オペレータと私はそれを把握することはできません。私は本当に、私に手渡した答えを得るちょうど右のパス

checkMatrix :: Matrix a -> a -> [a] -> Bool 
checkMatrix matr a lst = case matr of 
    x:xs | [] -> (i don't really know what to put for the base case) 
     | filter (== True) (x:xs !! 0) -> checkMatrix xs a lst 

thatsは私が得たすべての私を得るためのいくつかのポインタを必要としたくない、私は本当に非常に次をどうするかのよう迷ってしまいました

+2

ようこそ。さて、他人に答えがほしいと思うように思わないようにするには、すでに行った試行を見せてください。 –

+2

"私は試しました.." - これは完全に適切であり、コンパイルして実行しようとしたリテラルコード(これは複数のコードを含みます)とそのコードがあなたに与えたエラーをあなたの答えに含めることを奨励します。 – user2407038

+5

「マトリックス」とは何ですか? – melpomene

答えて

1

tl; drfilter someCondition (toList matrix) == otherListの効果があります。細部の詳細は、使用しているマトリクスの種類とニーズに応じて異なります。

全回答

私はあなたが使用しているものMatrix種類を知りませんが、アプローチは、任意の合理的に定義されたマトリクス型のために同様のことを行っています。

この回答では、matrixと呼ばれるHackageのパッケージのData.Matrixクラスを使用していると仮定します。

あなたはfilterを使用するべきだと思います。機能的に考えると、条件に基づいて、マトリックスからいくつかの要素を除去し、他の要素を保持したいと考えています。しかし、その考え方はあまり明確に定義されていないので、マトリックスはfilterを実行する自然な方法を提供しません。だから代わりに、私たちはマトリックスから要素を最初にリストに抽出したいと思っています。 matrixパッケージには、次の機能があります。

toList :: Matrix a -> [a] 

リスト表現をしたら、あなたは非常に簡単にしたい要素を取得するためにfilterを使用することができます。

いくつかの注意点と注意事項。

  • 使用している行列のパッケージはtoList自体が定義されていない場合、それはマトリックス型のためFoldableインスタンスを定義する場合は、チェックしてください。そうであれば、Data.FoldableはすべてFoldableタイプに対して機能する汎用のtoListを持っています。
  • ここでご注文ください。 の要素をリストに入れるべきであることは完全にはっきりしていません。なぜなら、行列は2次元であり、リストは本質的に1次元であるからです。あなたがやっていることの順序が重要な場合は、希望の順序を保証するために何らかの追加の努力を払わなければならないかもしれません。それが重要でない場合は、リストの代わりにData.Setまたはその他の順序付けられていないコレクションを使用することを検討してください。
  • checkMatrixの実装には何の制約もありません。リストの要素を比較するとEq aという制約が追加されます。順序付けされていないコレクションを使用する場合は、代わりにOrd aを追加します。
関連する問題