Filtrage par motif — Wikipédia
Le filtrage par motif est la vérification de la présence de constituants d'un motif par un programme informatique, ou parfois par un matériel spécialisé. Par contraste avec la reconnaissance de forme, les motifs sont complètement spécifiés. De tels motifs concernent conventionnellement des séquences ou des arbres.
Par exemple "*HD*pdf" peut signifier : "Toute chaîne contenant HD et se terminant par pdf".
Le filtrage par motif permet de vérifier si l'objet du filtrage possède une structure donnée, s'il s'y trouve telle ou telle sous-structure spécifique et laquelle, pour y retrouver des parties par l'organisation de leur contenu, et/ou éventuellement pour substituer quelque chose d'autre aux motifs reconnus.
Les séquences (particulièrement les chaînes de caractères) sont souvent décrites par des expressions rationnelles. Elles peuvent aussi être vues comme des arbres.
Les motifs d'arbre peuvent être utilisés par les langages de programmation comme un outil général pour traiter leur structure. Certains langages de programmation fonctionnelle tels qu'Haskell, ML et le langage de mathématiques symboliques Mathematica disposent d'une syntaxe permettant d'exprimer les motifs d'arbre et une construction de langage déclenchant l'exécution conditionnelle et la récupération de valeurs fondées sur celle-ci. Pour des raisons d'efficacité et de simplicité, ces motifs d'arbre n'ont pas toutes les fonctionnalités propres aux expressions rationnelles.
Selon le langage, les expressions de reconnaissance de motif peuvent être utilisées comme argument de fonctions, dans des expressions case où de nouvelles variables sont liées, ou dans des situations très limitées comme l'affectation[1] en Python. Il est souvent possible de spécifier plusieurs motifs à essayer en séquence. La reconnaissance de motif peut bénéficier de gardes.
Les langages de réécriture de termes utilisent le filtrage par motif pour évaluer un résultat.
Le filtrage par motif est d'autant plus approprié que la structure de données sous-jacente à chercher est simple et flexible.
C'est le cas pour les langages, tels que Lisp, manipulant des symboles de préférence à des chaînes de caractères ou des nombres. Dans ceux-ci, les motifs sont du même type que le reste des données, et peuvent donc être passés en paramètres à des fonctions. En d'autre termes, ce sont des entités de première classe.
Le filtrage par motif reconnaît un motif dans une structure arborescente préexistante tandis que les expressions rationnelles reconnaissent un motif dans une structure plate. Perl 6 propose un système qui intègre les deux sémantiques dans une syntaxe concrète unifiée.
Exemple de filtrage en OCaml
[modifier | modifier le code]Dans cet exemple écrit en OCaml, on crée une liste. Puis on définit une fonction récursive de recherche dans la liste à l'aide d'un filtrage.
# let l_test = [3 ; 4 ; 5];; val l_test : int list = [3; 4; 5] # let rec est_dans_liste x liste = match liste with | [] -> false (* fin de la liste : l'élément n'a pas été trouvé *) | tete::queue -> (x = tete) or (est_dans_liste x queue) (* il y a au moins un élément dans la liste : on le compare et si ce n'est pas le bon on continue le parcours récursif de liste *) ;; val est_dans_liste : 'a -> 'a list -> bool = <fun> # est_dans_liste 4 l_test;; (* recherche de l'entier 4 dans la liste l_test *) - : bool = true # est_dans_liste 4 [];; (* recherche de l'entier 4 dans une liste vide *) - : bool = false
Voir aussi
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]- Expression rationnelle
- Type algébrique de données
- Reconnaissance de forme pour les motifs flous
- AIML pour un langage d'intelligence artificielle fondé sur le filtrage de motif dans la parole
- SNOBOL pour un langage de programmation fondé sur une sorte de motif
- PCRE Perl Compatible Regular Expressions, une implantation moderne du filtrage par motif de chaîne utilisée par de nombreux langages
Sources
[modifier | modifier le code]- (en) The Implementation of Functional Programming Languages pages 53-103 Simon Peyton Jones, published by Prentice Hall, 1987.
Notes et références
[modifier | modifier le code]- Jusqu'à la version 3.9 de Python. En version 3.10, du pattern matching structurel, inspiré des langages fonctionnels, est ajouté au langage. Voir « What’s New In Python 3.10 — Python 3.10.0b3 documentation », sur docs.python.org (consulté le )
Liens externes
[modifier | modifier le code]- (en) The Mathematica Book, chapter Section 2.3: Patterns.
- (en) The Haskell 98 Report, chapter 3.17 Pattern Matching.
- (en) Python Reference Manual, chapter 6.3 Assignment statements.
- (fr) filtrage par motif en ocaml.
- (en) A Gentle Introduction to Haskell: Patterns.
- (en) Views: An Extension to Haskell Pattern Matching.
- (en) Nikolaas N. Oosterhof, Philip K. F. Hölzenspies, and Jan Kuper. Application patterns. A presentation at Trends in Functional Programming, 2005.
- (en) Une histoire incomplète de l'éditeur de texte QED par Dennis Ritchie - décrit l'histoire des expressions rationnelles.
- (en) Simphile - Logiciels Open Source de filtrage par motif.