1

この時期、私はHaskellを学んでいますが、簡単な運動を解くのに問題があります。

簡単な連想マップのデータ構造を書いて、自分で練習したいと思います。

これは私がこれまでに書いたコードです:

-- It represents a simple ordered couple in the form (key, value)
data Element a b = Element (a, b)
    deriving (Show)

-- It represents a (unordered) list of elements in the form (key, value)
data Dictionary a b = Dictionary [Element a b]
    deriving (Show)

-- It represents a simple dictionary which will be used for my tests
t :: Dictionary Char Int
t = Dictionary [Element ('a', 1), Element ('b', 2), Element ('a', 3)]

今、私は(a、b)の形式でカップルのリストを返す簡単なメソッドを書こうとしています。私は自分自身を行使し、他の方法(検索など)に役立つ簡単な機能を提供するためにそれを行っています。

私はこのコードを書きましたが、それが間違っていることはわかっています。

couples :: Dictionary a b -> [(a, b)]
couples (Dictionary t) = [(k , v) | (k, v) <- t]

問題は、明らかに「t」がカップルのリストではないことです。これは、型コンストラクター「Element」とそれに続く順序対によって構成される要素のリストによって構成されます。

「Element」型コンストラクターを「取り除く」にはどうすればよいですか?何も思いつきません...

前もって感謝します。

4

1 に答える 1

4

パターンマッチにElementコンストラクターを追加するだけです。

couples :: Dictionary a b -> [(a, b)]
couples (Dictionary t) = [(k , v) | (Element (k, v)) <- t]
于 2012-12-05T18:25:40.820 に答える