【发布时间】:2019-11-18 10:06:24
【问题描述】:
我正在尝试以字符串格式输出一手牌,但我不能从牌的等级中删除“数字”一词,我更愿意在没有辅助函数的情况下执行此操作,因为它看起来真的很乱,在没有辅助功能的情况下执行此操作的任何建议。另外,当我使用display 函数时,我在Prelude 中使用putStr (display x)。这是到目前为止的代码:
displayCard :: Card -> String
displayCard c = show (rank c) ++ " of " ++ show (suit c) ++ "\n"
display :: Hand -> String
display Empty = "\n"
display (Add c h) = displayCard c
++ display h
displayRank :: Rank -> String
displayRank (Numeric 2) = "2"
displayRank (Numeric 3) = "3"
displayRank (Numeric 4) = "4"
displayRank (Numeric 5) = "5"
displayRank (Numeric 6) = "6"
displayRank (Numeric 7) = "7"
displayRank (Numeric 8) = "8"
displayRank (Numeric 9) = "9"
displayRank (Numeric 10) = "10"
displayRank Jack = "Jack"
displayRank Queen = "Queen"
displayRank King = "King"
displayRank Ace = "Ace"
【问题讨论】:
-
rank应该与displayRank相同吗? -
@mkriger1:我猜
rank是Card类型的“getter”,但由于我们没有看到数据定义,我们无法确定。 -
displayRank (Numeric a) = show a。但建议为你的类型写一个Show实例。
标签: string haskell constructor type-conversion show