1

我遇到了一个我似乎无法解决的小问题,现在已经解决了几个小时无济于事。

我已经定义了一个数据类型,Hand。

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

我正在使用的另一种类型:

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

我正在尝试创建一个中缀运算符,它将添加两只手并返回第三只手。

(<+) :: 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 <+

它返回给我的三个参数是空的(总是这个作为第一个),然后是一只大手作为第二个和第三个参数。例如:错误图像。 另外,quickchest 测试看起来像((hand1 <+ hand2) <+ hand3) == (hand1 <+ (hand2 <+ hand3)).

我猜我没有足够的案例来处理所有可能的情况?我只是不知道出了什么问题。:(

请不要直接解决,提示会做!

编辑:作为一个有用的评论者建议并添加了一个案例,当两只手都是空的时,它会返回空手。现在一切正常。:) 为了消除混乱,我早些时候宣布了什么是空手。Empty 和 empty 在我的代码中是两个不同的东西,我“正确”地使用了它们。:)

4

0 回答 0