【发布时间】:2018-01-02 15:49:16
【问题描述】:
我正处于修订周,我正在努力为 Haskell 考试写一份过去的论文。但是,这个功能是我无法应付的。
扑克牌的价值表示如下: '2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'T'、'J'、'Q'、'K'、'A '。 一手牌可以写成字符串,例如“A563Q”。
我需要写一个函数 scoreHand :: [PlayingCardValue] -> Int 这将返回一手牌中的总价值。 'A' 的值为 11。'T'、'J'、'Q' 和 'K' 的值各为 10。其他数字有它们的面值('2' 的值为 2,'3 ' 的值为 3,依此类推)。
所以我应该写这个函数的两个版本。 第一个使用递归,没有库函数或列表解析,第二个使用列表解析、库函数等。
我用递归编写了这个版本,但我正在努力解决另一个问题 版本。
这是我的递归代码(尽管我使用的是一个库函数,但我最终会弄明白的)
*
import Data.Char
type PlayingCardValue = Char
scoreHand :: [PlayingCardValue] -> Int
scoreHand [] = 0
scoreHand (x:xs) =
if x > '1' && x < '9'
then digitToInt x + scoreHand (xs)
else if x == 'T' || x == 'J' || x == 'Q' || x == 'K'
then 10 + scoreHand (xs)
else if x == 'A'
then 11 + scoreHand (xs)
else 0 + scoreHand (xs)
* 关于如何不使用递归创建相同函数的任何想法?
【问题讨论】:
-
不应该是
x <= '9',而不是x < 9吗?
标签: list haskell playing-cards