In "Programmazione F #" Mi sono imbattuto in un pattern-matching come questo (ho semplificato un po '):intesa pattern matching con operatore cons
let rec len list =
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;
In pratica, ho capito che l'ultima partita riconosce la testa e coda della lista. Concettualmente, non capisco perché funzioni. Per quanto ne so, :: è l'operatore cons, che aggiunge un valore in testa di una lista, ma non mi sembra che venga usato come operatore qui. Dovrei capire questo come una "sintassi speciale" per le liste, dove: viene interpretato come un operatore o un "modello di corrispondenza" a seconda del contesto? Oppure la stessa idea può essere estesa per tipi diversi dagli elenchi, con altri operatori?
Grazie, il vostro punto su :: essere un costrutto speciale è esattamente ciò di cui non ero chiara. Ho sperimentato cercando di utilizzare altri operatori in pattern-matching nello stesso modo, ma non aveva molto senso e non ho ottenuto nulla, ed è quello che mi ha fatto pensare ai contro. – Mathias
Si noti che lo stesso vale per Tuples: è possibile utilizzare il modello (,) per creare e abbinare/disimballare tuple e anche per altri tipi (Some()/None) ecc. – Benjol
Ecco un elenco di [tutti supportati tipi di motivo] (https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching) con esempi. – JanDotNet