【发布时间】:2018-10-13 15:18:15
【问题描述】:
我在 Haskell 中创建了两个对象,主要是一张王牌和手牌。
trump = Card Spade Two
myhand = [Card Diamond Three, Card Spade Two]
其中卡片表示为:
data Card = Card Suit Rank
我编写了一个名为retrieveSuit 的函数,它检索黑桃、方块、红心等牌的花色。
retrieveSuit :: Card -> Suit
retrieveSuit (Card suit _) = suit
我遇到的问题是我正在尝试编写一个函数来比较王牌和手牌的花色并查看手牌是否包含王牌,但我在映射 trump 和 myhand 的两个论点时遇到问题,因为我只知道如何映射一个论点,而不知道如何映射两者。
checkTrump :: Card -> [Card] -> Bool
checkTrump trump myhand = (map retrieveSuit myhand) (retrieveSuit trump) if trump == myhand then True else False
当我运行时,我得到错误
error: parse error on input `if'
我是否将函数retrieveSuit 正确应用于checkTrump 的两个参数?在这种情况下,程序将输出 True,因为手中的牌确实包含黑桃,它也是王牌的花色。
编辑: 更新第二种情况。如果我要返回与王牌相同花色的手牌,而不是返回真假:
checkTrump :: Card -> [Card] -> Card
checkTrump trump myhand = filter ((cardSuit trump) `elem` (map cardSuit myhand))
【问题讨论】:
标签: haskell