web-dev-qa-db-fra.com

Que fait l'opérateur de l'infixe à Haskell?

Je lis ne introduction douce à Haskell (ce qui n'est pas si doux) et il utilise à plusieurs reprises le : Opérateur sans expliquer directement ce qu'il fait.

Alors, qu'est-ce que ça fait exactement?

45
moo

: est l'opérateur "PREPEND":

x : xs

Renvoie une liste qui a x comme premier élément, suivi de tous les éléments de xs. Dans d'autres langages fonctionnelles, cela s'appelle généralement cons, car il "inconvénient" Tract a une liste de liste recutivement par application répétée à partir d'une liste vide:

1 : 2 : 3 : 4 : []

est la liste [1, 2, 3, 4].

72
Konrad Rudolph

Pourrait toujours vérifier les types de GHCI/Hugs, car les premières étapes du tutoriel vous encouragent à télécharger GHC/câlins.

Prelude> :t (:)
(:) :: a -> [a] -> [a]
Prelude> :t (++)
(++) :: [a] -> [a] -> [a]

De leurs types respectifs, il est assez facile de déduire leur usage.

PS: http://hakell.org/hoogle/ est génial.

22
codebliss

Le: opérateur de Haskell est le constructeur pour les listes. C'est ce que ce soit quoi que ce soit avant le côlon sur la liste spécifiée après.

Par exemple, une liste d'entiers est faite par "consentir" chaque numéro sur la liste vide, par exemple;

La liste [1,2,3,4] peut être construit comme suit:

  • 4 : [] (consistant 4 à la liste vide)
  • 3 : [4] (Consant 3 sur la liste contenant 4)
  • 2 : [3,4] (Consultez 2 sur la liste contenant 3, 4)
  • 1 : [2,3,4] (Consage 1 sur la liste contenant 2,3,4)

te donner;

[1,2,3,4]

Écrit complètement c'est;

1 : 2 : 3 : 4 : []
16
Ciaran

C'est le constructeur de type pour les listes. Ce n'est pas différent d'un autre constructeur de type comme Just ou Left, sauf que c'est une infixe. Les constructeurs de types valides peuvent soit être des mots à commencer par une lettre majuscule, soit des symboles commençant par un côlon.

Vous pouvez donc définir des constructeurs d'infixes pour vos propres types de données. Par exemple:

data MyList a = a :> MyList a
              | Empty

dans le code ci-dessus, nous définissons un type appelé MyList avec deux constructeurs: le premier est un constructeur bizarre :> qui prend un élément et un autre MyList a; La seconde est un constructeur vide Empty qui équivaut à [] Dans les listes indigènes de Haskell.

Ce qui précède est équivalent à:

data MyList a = Cons a  (MyList a)
              | Empty
11
jberryman