flushPoints :: [Card] -> Integer
flushPoints cs@(c1:hd) =
if flushPointsCalc True (suitCount hd) >
flushPointsCalc False (suitCount cs)
then flushPointsCalc True (suitCount hd)
else flushPointsCalc False (suitCount cs)
假设我有一个如上所述的功能,我该怎么做才能缩短它?
我在考虑做一个where hdFlush = flushPointsCalc True (suitCount hd)
,但我不能因为高清被宣布在上面。
我觉得在Haskell中有一个合适的方法,考虑到它有多懒,但我不知道在哪里看。
答案 0 :(得分:8)
这正是标准max
函数的作用:它选择更大的值。因此,您可以将代码重写为:
flushPoints cs@(c1:hd) = max (flushPointsCalc True (suitCount hd))
(flushPointsCalc False (suitCount cs))
如果您只是想知道如何为flshPointsCalc True (suitCound hd)
提供本地名称,那么 确实可以使用where
子句:
flushPoints :: [Card] -> Integer
flushPoints cs@(c1:hd) =
if hdFlush > csFlush then hdFlush else csFlush
where hdFlush = flushPointsCalc True (suitCount hd)
csFlush = flushPointsCalc False (suitCount cs)
cs@(c1:hd)
模式位于where
函数正下方的flushPoints
块的范围内,因此您可以访问其中的hd
。