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

bpl*_*lus 19 haskell list

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

http://learnyouahaskell.com

在列表的这个页面上,他解释说,在字典顺序中比较列表,他给出了这个例子:

ghci> [3,2,1] > [2,10,100]
True
Run Code Online (Sandbox Code Playgroud)

从一些谷歌搜索看来,词典排序意味着按字母顺序或顺序数字排序(?),但我仍然无法理解这个评估为True.

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

Tho*_*mar 20

计算结果True为3大于2.找到结果后,比较将在此处停止.他证明了2和10没有比较.数组比较的结果是true.如果第一个数组也以2开头,则会产生比较结果false.

当词典排序不能导致用户期望的是Windows中的文件名时,一个很好的例子.如果你有文件命名xyz1.txt,xyz2.txt,xyz10.txt和xyz20.txt,字典顺序将是:xyz1.txt,xyz10.txt,xyz2.txt, xyz20.txt

  • 不,我的理由是目的是检测数组x是大于还是小于数组y.只要数组以相同的元素开头,就不能做出这个决定,因此继续进行比较.所以通过我的推理[3,4]!= [3,5],因为4!= 5. (3认同)

Yit*_*itz 14

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


rkh*_*rov 8

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

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
Run Code Online (Sandbox Code Playgroud)