0

Haskell 集合内包表記でパターン マッチが可能かどうかを調べています。タプル、またはネストされたリストとタプルを含むリストのリストがあります。

例えば

[[(1,("A",1)), (2,("B",1))], [(0,("A",1)), (3,("B",2)),  (2,("C",1))]]

「A」を含むタプルを破棄し、他のタプルで任意の計算を実行したいと考えています。

私は線に沿って考えていました:

pack(xs:xss) = [package x | x <- xs, x /= (1,("A", 1))] : (pack xss)
pack(_) = []

package x = case x of
    (i, ("B", j)) -> (i + j, ("B", j * i)) 
    (i, ("C", j)) -> (i * j, ("C", j + i))
    (otherwise) -> x

以下はワイルドカードを許可する場合があります。

x /= (1,("A", 1))

そのような:

x /= (_,("A", _))

ネストされたタプルの数値は常に int 型になることに注意してください。それが役立つかどうかはわかりません...

私は周りを見回しましたが、これが可能かどうかはわかりません。以下に示すように、フィルタリングがより良いオプションのようです。ただし、未知のものをフィルタリングしています。

Haskell リスト内包表記とパターン マッチング

私の問題は、より大きな作業/機能から抽象化された例ですが、問題の本質をここで捉えることができれば幸いです。私は別の提案を受け入れます。

4

1 に答える 1