string - Haskell 如何对字符串排序?

标签 string sorting haskell

我最近一直在学习 Haskell,我注意到 String类型(或 [Char])可以订购。例如,这是有效的:

ghci> "foo" > "bar"
True
ghci> "?<>!" `compare` "[&*}"
LT

Haskell 如何下单 String s,这个功能什么时候有用?

最佳答案

How does Haskell order Strings, and when would this functionality be useful?



首先,Char 是 Ord 的一个实例,由机器上底层原始 char 类型上的相等原语给出。
instance Ord Char where
    (C# c1) >  (C# c2) = c1 `gtChar#` c2
    (C# c1) >= (C# c2) = c1 `geChar#` c2
    (C# c1) <= (C# c2) = c1 `leChar#` c2
    (C# c1) <  (C# c2) = c1 `ltChar#` c2

那么 String 被定义为 [Char] (Char 列表),并且列表通常具有排序,如果它们的元素具有排序:
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

就是这样。任何元素具有任何顺序的列表都将依次排序。

由于 Char 是按照其作为位模式的底层表示进行排序的,并且列表是按照列表的元素顺序给出的,因此您可以看到 String 的行为。

when would this functionality be useful?



用于将字符串插入多态的数据结构中,但需要排序方法。最著名的是SetMap .

关于string - Haskell 如何对字符串排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126237/

相关文章:

c - ELF 文件中的字符串是如何编码的?

ios - 将字符串从一个 View Controller 传递到另一个 Tabbar Controller

php - 如何使用 PHP 中包含的关联数组的子字段对关联数组进行排序?

haskell - Haskell 中的类型 `Fix` 和函数 `fix` 如何相同?

python - 合并 2 个数组以获得 python 中的唯一值

arrays - 从 gmatch 返回的列表在 Lua 中创建数组

arrays - Go:对数组进行排序,如果在 `Less(i, j int)` 中发现错误则丢弃元素

java - java 按升序对矩阵的列进行排序

haskell - 如何根据 Haskell 中的分数列表创建排名?

haskell - 双胞胎的方法是什么?