我想将两个功能合并为一个。
功能是
data Dice = Stone Char deriving (Show, Eq)
calculateScore :: [Dobbelsteen] -> Int
calculateScore xs = sum[giveValueDice x | x <- xs]
giveValueDice :: Dice -> Int
giveValueDice (Stone d) = if d == 'W' then 5 else digitToInt d
通常,我只是将一行复制到第一个函数中,然后稍作更改以使语法正确。但是在这里我有点迷路了
答案 0 :(得分:4)
您已经注意到,您不能只在此处直接内联;原因是您正在Stone
中的giveValueDice
上进行模式匹配。这种模式匹配可以在列表理解的右侧移动:
calculateScore :: [Dobbelsteen] -> Int
calculateScore xs = sum[if d == 'W' then 5 else digitToInt d | (Stone d) <- xs]
合并这两个函数的另一种方法是使用where
子句,该子句将一个函数“合并”到另一个函数中,同时保持它们的独特性:
calculateScore :: [Dobbelsteen] -> Int
calculateScore xs = sum[giveValueDice x | x <- xs]
where
giveValueDice :: Dice -> Int
giveValueDice (Stone d) = if d == 'W' then 5 else digitToInt d