Cosa fa l’operatore infisso in Haskell?

Sto leggendo A Gentle Introduction to Haskell (che non è così delicato) e usa ripetutamente l’operatore : senza spiegare direttamente cosa fa.

Quindi, cosa fa esattamente?

: è l’operatore “antepone”:

 x : xs 

Restituisce una lista che ha x come primo elemento, seguito da tutti gli elementi in xs . In altri linguaggi funzionali, di solito viene chiamato cons , perché “cons” traccia una lista ricorsivamente mediante un’applicazione ripetuta da una lista vuota:

 1 : 2 : 3 : 4 : [] 

è la lista [1, 2, 3, 4] .

Puoi sempre controllare i tipi in GHCi / HUGS, poiché i primi passi del tutorial ti incoraggiano a scaricare GHC / HUGS.

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

Dai rispettivi tipi, è abbastanza facile dedurne l’utilizzo.

PS: http://haskell.org/hoogle/ è fantastico.

L’operatore: in Haskell è il costruttore per gli elenchi. E ‘contro’ qualunque cosa sia prima dei due punti sulla lista specificata dopo di essa.

Ad esempio, un elenco di numeri interi viene creato “consingendo” ciascun numero sulla lista vuota, ad es.

L’elenco [1,2,3,4] può essere costruito come segue:

  • 4 : [] (con conseguente 4 alla lista vuota)
  • 3 : [4] (consing 3 nella lista contenente 4)
  • 2 : [3,4] (con 2 sulla lista che contiene 3, 4)
  • 1 : [2,3,4] (con 1 sulla lista contenente 2,3,4)

dandoti;

 [1,2,3,4] 

Scritto pienamente questo è;

 1 : 2 : 3 : 4 : [] 

È il costruttore di tipi per elenchi. Non è diverso da qualsiasi altro tipo di costruttore come Just o Left , tranne che è infisso. I costruttori validi di tipo possono essere parole che iniziano con una lettera maiuscola o simboli che iniziano con due punti.

Quindi puoi definire i costruttori infix per i tuoi tipi di dati. Per esempio:

 data MyList a = a :> MyList a | Empty 

nel codice precedente definiamo un tipo chiamato MyList con due costruttori: il primo è un costruttore dall’aspetto strano :> che accetta un elemento e un’altra MyList a ; il secondo è un costruttore vuoto Empty che è equivalente a [] negli elenchi nativi di Haskell.

Quanto sopra è equivalente a:

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