私は解決できないように見える小さな問題に遭遇しました.数時間それを試してみましたが、役に立ちませんでした.
データ型 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つの異なるものであり、私はそれらを「正しく」使用しました。:)