比较Haskell中的列表,或者更具体地说,是什么是词典顺序?

时间:2010-09-06 11:41:26

标签: list haskell

我刚刚开始这个很好的hashkell初学者教程:

http://learnyouahaskell.com

on this page on lists他解释说,按字典顺序比较列表,他给出了这个例子:

ghci> [3,2,1] > [2,10,100]
True

在一些谷歌搜索中,在我看来,词典排序意味着按字母顺序排列(?),但我仍然无法理解这种评价为真。

我在这里遗漏了一些明显的东西,有人可以帮忙吗?

6 个答案:

答案 0 :(得分:20)

这评估为True,因为3大于2.找到结果后,比较将在此处停止。他证明了2和10没有比较。数组比较的结果是true。如果第一个数组也以2开头,那么比较将导致false

当词典排序不会导致用户期望的是Windows中的文件名时,一个很好的例子。如果您有名为xyz1.txtxyz2.txtxyz10.txtxyz20.txt的文件,则字典顺序为:xyz1.txtxyz10.txt,{{1 },xyz2.txt

答案 1 :(得分:13)

“词典顺序”的意思类似于单词的方式 在字典中排序:如果是第一个元素 每个列表都相同,比较第二个元素; 如果第二个元素相同,则比较三分之一; 如果一个列表在另一个列表之前用完, 较短的清单是“少”。

答案 2 :(得分:8)

除了其他答案之外:[GHC]中列表的instance Ord的实际定义几乎说明了一切:

instance (Ord a) => Ord [a] where
    compare []     []     = EQ
    compare []     (_:_)  = LT
    compare (_:_)  []     = GT
    compare (x:xs) (y:ys) = case compare x y of
                                EQ    -> compare xs ys
                                other -> other

答案 3 :(得分:2)

示例:

通过以下步骤会发生什么?

[1,2,9,2] > [1,2,10,1] -- False

[1,2, 9 ,2]

[1,2, 10 ,1]

  1. 比较 1> 1 ,相等?是的,继续下一次比较
  2. 比较 2> 2 ,相等?是的,继续下一次比较
  3. 比较 9> 10 ,相等?不,9实际上是少,停止并返回False
  4. 其他例子

    [1,2, 9 ,2]< [1,2, 10 ,1] - 真实

    [1,2,3, 4 ]< = [1,2,3, 5 ] - 真实

    [1,2,3,4]> = [1,2,3,4] - 真

    [1,2,3,4]< = [1,2,3,4] - 真

答案 4 :(得分:0)

理解这一点:比较两个列表并不意味着比较每个列表中所有元素的值。相反,它意味着简单地将list1中每个元素的词汇顺序与list2中的对应元素进行比较,并在发现两个元素以不同的词汇顺序排序时返回结果。

答案 5 :(得分:0)

我认为LearnYouAHaskell将受益于编写Only一词。

First the heads are compared. *Only* if they are equal then the second elements are compared, etc.

因此,由于3大于2,因此决策已完成,因此无需检查索引1和2。

[3,2,1] > [2,10,100] == [3] > [2]

也可以认为它有点像可排序的日期

2019-07-06 > 2011-08-09

如果您这样做的话,您首先要检查年份,而不必检查现在的月份或天就知道第一个日期更大。