Dans « programmation F # » Je suis tombé sur un motif correspondant comme celui-ci (j'ai simplifié un peu):modèle Comprendre correspondant à l'opérateur de contre
let rec len list =
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;
Pratiquement, je comprends que le dernier match reconnaît la tête et queue de la liste. Conceptuellement, je ne comprends pas pourquoi cela fonctionne. Pour autant que je comprenne, :: est l'opérateur contre, qui ajoute une valeur en tête de liste, mais il ne me semble pas qu'il soit utilisé comme opérateur ici. Dois-je comprendre cela comme une «syntaxe spéciale» pour les listes, où: est interprété comme un opérateur ou un «modèle de correspondance» selon le contexte? Ou peut-on étendre la même idée pour des types autres que des listes, avec d'autres opérateurs?
Merci, votre remarque à propos de: être une construction spéciale est exactement ce que je n'étais pas clair. J'ai expérimenté en essayant d'utiliser d'autres opérateurs dans le pattern-matching de la même façon, mais ça n'avait pas beaucoup de sens et je n'ai rien trouvé, ce qui m'a fait me poser des questions sur les inconvénients. – Mathias
Notez que la même chose est vraie pour Tuples - vous pouvez utiliser le motif (,) pour construire et pour faire correspondre/décompresser des tuples, et pour d'autres types aussi (Some()/None) etc – Benjol
Voici une liste de [tous supportés types de modèles] (https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching) avec des exemples. – JanDotNet