比较haskell中的元组



我刚刚写了一个函数,它将接受元组的输入,其中第一个元素是字符串,第二个元素是数字。比如(String,Int(。该函数应该将";Int;值,以检查它是否大于或小于某个值。只是玩了一下,我意识到以下函数的定义是有效的。

check :: (String, Int) -> Grade
check (course, mark) 
| (course, mark) < (course, 50) = Fail
| otherwise = Pass

这个函数在检查整数值时似乎起作用。但我不明白为什么这样有效?元组中的字符串发生了什么?如何将字符串与自身进行比较?如果有人能帮我了解发生了什么,我将不胜感激

元组的<的定义等价于以下内容:

instance (Ord a, Ord b) => Ord (a,b) where
(x,y) < (x',y')
| x<x'       = True
| x==x'      = y<y'
| otherwise  = False

这被称为字典排序。

在您的代码中,您通常处于x==x'分支,因为course==course保持(至少对于有限字符串(。这是一个不必要的比较,更好和等效的方法是直接比较mark,甚至不匹配course:

check :: (String, Int) -> Grade
check (_, mark) 
| mark < 50  = Fail
| otherwise  = Pass

相关内容

  • 没有找到相关文章

最新更新