我刚刚开始这个很好的hashkell初学者教程:
on this page on lists他解释说,按字典顺序比较列表,他给出了这个例子:
ghci> [3,2,1] > [2,10,100]
True
在一些谷歌搜索中,在我看来,词典排序意味着按字母顺序排列(?),但我仍然无法理解这种评价为真。
我在这里遗漏了一些明显的东西,有人可以帮忙吗?
答案 0 :(得分:20)
这评估为True
,因为3大于2.找到结果后,比较将在此处停止。他证明了2和10没有比较。数组比较的结果是true
。如果第一个数组也以2开头,那么比较将导致false
。
当词典排序不会导致用户期望的是Windows中的文件名时,一个很好的例子。如果您有名为xyz1.txt
,xyz2.txt
,xyz10.txt
和xyz20.txt
的文件,则字典顺序为:xyz1.txt
,xyz10.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,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
如果您这样做的话,您首先要检查年份,而不必检查现在的月份或天就知道第一个日期更大。