Haskell元组列表比较对

hri*_*isc 1 haskell compare tuples

我是Haskell的新手,我正在尝试一些东西.我在比较元组元素时遇到了一些麻烦.

假设我有一个元组[(1,3),(2,1),(4,4)].我想将每对索引相互比较,并将一些数据保存到计数器值并返回该值.

例如,我想要的是:元组:[(a,b),(c,d),(e,f)]
a>b我想要到add 3柜台时.
a==b我想要到add 1柜台.
否则add 0到柜台.同样的(c,d)(e,f).
在迭代了我的元组之后,我想要返回计数器.

所以在我的例子中我有元组[(1,3),(2,1),(4,4)].
该函数应该执行,
因为1<3将0添加到计数器.
由于2>1加3来反击.
由于4=4加1来反击.
毕竟回归0+3+1 = 4.

有任何想法吗?先感谢您!

(编辑)

calculateWins :: [(Int,Int)]->Int           
calculateWins d ((a,b) :xs) = x
    where x 
     |a>b   =   3
     |a==b  =   1
     |otherwise =   0
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

这看起来像足球杯(和其他一些运动)的点系统.我们最好的目的是计算一个计算一个这样的元组的得分的东西,而不是实现计算总和的函数,所以我们不会这样做:

score :: Ord a => (a, a) -> Int
Run Code Online (Sandbox Code Playgroud)

通过使用aas类型,我们可以使用任何类型的值,只要我们可以比较它们(Ord类型约束).所以我们可以这样写:

score (x, y) = -- ...
Run Code Online (Sandbox Code Playgroud)

现在以防万一x > y,然后得分是3积分,以防万一x == y,然后得分是1积分,最后在情况x < y(否则),然后得分是0积分,所以我们可以把它写成:

score :: Ord a => (a, a) -> Int
score (x, y) | x > y = 3
             | x == y = 1
             | otherwise = 0
Run Code Online (Sandbox Code Playgroud)

所以现在我们可以执行a 计算map score得分列表,通过使用sum,我们可以计算这些点的总和,如:

calculateWins :: Ord a => [(a, a)] -> Int
calculateWins = sum . map score
Run Code Online (Sandbox Code Playgroud)