list - tipos - string en haskell
Comparando listas en Haskell, o más específicamente, ¿qué es un orden lexicográfico? (5)
Estoy empezando este bonito tutorial para principiantes de hashkell:
en esta página en las listas , explica que las listas se comparan en comparación en orden lexicográfico, da este ejemplo:
ghci> [3,2,1] > [2,10,100]
True
A partir de algunas búsquedas en Google, me parece que el ordenamiento lexicográfico significa orden alfabético o secuencial de números (?), Pero todavía no puedo entender esta evaluación a Verdadero.
Me estoy perdiendo algo obvio aquí, ¿alguien puede ayudar?
"Orden lexicográfico" significa similar a la forma en que se ordenan las palabras en un diccionario: si el primer elemento de cada lista es el mismo, compare los segundos elementos; si los segundos elementos son iguales, compara los terceros; etc. Si una lista se queda sin elementos antes que la otra, la lista más corta es "menos".
Además de las otras respuestas: la definición real de la instance Ord
para listas [en GHC] prácticamente lo dice todo:
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
Ejemplo:
¿Qué pasa al caminar por lo siguiente?
[1,2,9,2] > [1,2,10,1] -- False
[1, 2, 9 , 2]
[1, 2, 10 , 1]
- comparar 1> 1 , igual? Sí, continúe con la siguiente comparación.
- compara 2> 2 , igual? Sí, continúe con la siguiente comparación.
- comparar 9> 10 , igual? no, 9 es en realidad menos, detente y devuelve Falso
Otros ejemplos
[1,2, 9 , 2] <[1,2, 10 , 1] - Verdadero
[1,2,3, 4 ] <= [1,2,3, 5 ] - Verdadero
[1,2,3,4]> = [1,2,3,4] - Verdadero
[1,2,3,4] <= [1,2,3,4] - Verdadero
Esto se evalúa como True
como 3 es mayor que 2. Al encontrar un resultado, la comparación se detiene aquí. Está demostrando que 2 y 10 no son comparados. El resultado de la comparación de matrices es true
. Si la primera matriz también comenzó con 2, la comparación resultaría false
.
Un buen ejemplo para cuando el ordenamiento lexicográfico no da como resultado lo que el usuario espera es el nombre de los archivos en Windows. Si tiene archivos llamados xyz1.txt
, xyz2.txt
, xyz10.txt
y xyz20.txt
, el orden lexicográfico sería: xyz1.txt
, xyz10.txt
, xyz2.txt
, xyz20.txt
Solo entienda esto: comparar dos listas no significa comparar los valores de todos los elementos en cada lista. Más bien, significa simplemente comparar el orden léxico de cada elemento en la lista1 con el elemento correspondiente en la lista2, y devolver el resultado tan pronto como se encuentre que los dos elementos están ordenados de forma léxica diferente.