Soy un novato en Haskell y espero que esta pregunta no sea tonta.¿La "Lista" se maneja especialmente en la coincidencia de patrones de Haskell?
he visto tanta ejemplo, que cuando estoy teniendo una lista, yo soy capaz de igualar y unir "elemento de composición" de la lista de variables individuales:
listSizeDesc :: [a] -> String
listSizeDesc [] = "Emtpy"
listSizeDesc (x:xs) = "Something inside"
Sin embargo, traté de hacer algo como:
foo :: Int -> String
foo 0 = "Zero"
foo (n - 1) = "next number is " ++ show n
No funciona.
Me parece que tanto (n-1) como (x: xs) describen cómo se "crea" el argumento y vincula el "componente" a un argumento. ¿La forma en que se combinó la Lista está especialmente diseñada para facilitar la recursión? Porque me parece que esta lógica de vinculación/vinculación de argumentos no se aplica a otras funciones, excepto (:).
Definitivamente no es una pregunta estúpida. Este es mi entendimiento como un compañero novato: las listas no son "especiales". La coincidencia de patrones funciona con: porque: es un constructor de tipos para listas. Funciona tipo constructores pero no para funciones generales. Cómo se explica bastante bien este trabajo [aquí en WikiBooks] (http://en.wikibooks.org/wiki/Haskell/Pattern_matching) –
No existe una pregunta tonta, siempre y cuando esté bien planteada. – hugomg
Respuesta corta: No. –