1

私は解決できないように見える小さな問題に遭遇しました.数時間それを試してみましたが、役に立ちませんでした.

データ型 Hand を定義しました。

data Hand = Empty | Add Card Hand
        deriving (Eq, Show)

そして、私が使用している別のタイプ:

data Card = Card { rank :: Rank, suit :: Suit }
        deriving (Eq, Show)

2 つの手を追加して 3 つ目の手を返す中置演算子を作成しようとしています。

(<+) :: Hand -> Hand -> Hand
(<+) (Add c1 h1) (empty) = (Add c1 h1)
(<+) hand1 (Add c2 hand2) = (Add c2 (hand1 <+ hand2))

これでクイックチェックテストを実行して、関連付けられているかどうかを確認すると、数回後にエラーが発生します。エラーは言う:

BlackJack.hs:(71,1)-(72,53): Non-exhaustive patterns in function <+

返される 3 つの引数は空 (常にこれが最初の引数) で、2 番目と 3 番目の引数は大きなハンドです。例:エラーの画像。 また、quickchest テストは次のようになり((hand1 <+ hand2) <+ hand3) == (hand1 <+ (hand2 <+ hand3))ます。

考えられるすべてのシナリオを処理するのに十分なケースがないと思いますか? 私は何がうまくいかなかったのか理解できません。:(

直接的な解決策は避けてください。ヒントは役に立ちます。

編集:有益なコメンターとして、2つの手が空の場合のケースを提案および追加しました。これにより、空の手が返されます。すべてがうまく機能するようになりました。:) そして、混乱を解消するために、空の手が何であるかを以前に宣言しました。私のコードでは空と空は2つの異なるものであり、私はそれらを「正しく」使用しました。:)

4

0 に答える 0