Haskell (:) et (++) différences

Je suis désolé pour une question comme ça. Je ne suis pas trop sûr au sujet de la différence de la : et ++ opérateur en Haskell.

x:y:[] = [x,y]  

aussi

[x] ++ [y] = [x,y]

comme pour la fonction d'inversion qui se pose cette question, pour moi,

reverse ::[a]->[a]
reverse [] = []
reverse (x:xs) = reverse(xs)++[x]

Pourquoi ne pas les travaux suivants?

reversex ::[Int]->[Int]
reversex [] = []
reversex (x:xs) = reversex(xs):x:[]

donnant une erreur de type.

  • Comme une note de côté, vous pouvez (et devriez) appel sans utiliser de parenthèses: reverse (x:xs) = reverse xs ++ [x], ou vous allez trébucher lorsque vous travaillez avec des fonctions à plusieurs arguments.
  • Ne pas appeler des fonctions comme func(arg). Pauvre Haskell. Toujours faire appel à des fonctions comme func arg. Code avec claire des espaces rend plus confiant et plus lisible le code.
  • func arg est en effet plus correct Haskell que func(arg) mais je dirais f(x) est plus lisible que f x en général car elle correspond à la majorité des autres langues, et aussi la manière mathématique de la spécification d'une fonction. Donc, je dirais "plus confiant et plus lisible" est une question d'opinion.
InformationsquelleAutor DarthVader | 2009-11-30