Come altri hanno sottolineato, l'operatore :
è un costruttore di dati che consente di creare un elenco aggiungendo un elemento davanti a un elenco esistente.
L'espressione (o il termine) 1 : 2 : []
è in realtà un albero 1 : (2 : [])
, dove
- Il nodo radice è etichettato con
:
- La radice ha due figli: una foglia etichettata con
1
e la sottostruttura 2 : []
Un termine può essere visto come una struttura di dati che denota un valore: il valore è ottenuto valutando / riducendo il termine:
(1 + 2) + 5 => 3 + 5 => 8
Un termine può anche essere usato come modello contro il quale vogliamo abbinare i valori. Ad esempio: il termine 1 : 2 : []
è un modello che corrisponde all'elenco [1, 2].
I pattern possono contenere variabili, ad es. %codice%. Questo è un albero con un nodo radice etichettato con x : y
e due foglie etichettate con le variabili :
e x
. Puoi definire una sostituzione per le variabili, ad es. %codice%. Con questa sostituzione, il termine y
può essere unificato con il termine x --> 1, y --> 2 : []
.
Come probabilmente già sai, la variabile speciale x : y
viene usata quando siamo interessati a trovare una sostituzione, ma non siamo interessati alla sostituzione effettiva, cioè vogliamo solo sapere che ce n'è uno.
Quando si definisce una funzione in Haskell, ogni funzione sul lato sinistro contiene schemi che devono essere confrontati con gli argomenti effettivi. Se viene trovata una sostituzione, viene valutata la parte destra, con gli argomenti formali sostituiti dai termini nella sostituzione.
Quindi, un termine può essere usato per la corrispondenza del modello (ad esempio nel lato sinistro di un'equazione di funzione) o per denotare un valore (ad esempio nel lato destro di un'equazione). Affinché un termine nella parte destra rappresenti un valore, è necessario
- non contengono nessuna variabile libera, come in
1 : 2 : []
- o contiene solo variabili libere che sono state associate facendo corrispondere il lato sinistro con gli argomenti della chiamata di funzione.
Riassumere: si usa la stessa sintassi per schemi ed espressioni perché in entrambi i casi si stanno costruendo termini, anche se questi sono usati in modi diversi.