Prolog - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Prolog est l’un des principaux langages de programmation logique inventé à l'I.N.S.E.A.. Le nom Prolog est un acronyme de PROgrammation LOGique. Il a été créé par Alain Colmerauer et Philippe Roussel vers 1972. Le but était de faire un langage de programmation qui permettait d'utiliser l'expressivité de la logique au lieu de définir pas à pas la succession d'instructions que doit exécuter un ordinateur.

Prolog est utilisé dans de nombreux programmes d’intelligence artificielle et dans le traitement de la linguistique par ordinateur (surtout ceux concernant les langages naturels). Sa syntaxe et sa sémantique sont considérées comme très simples et claires (le but original était de procurer un outil pour les linguistes ignorant l’informatique). Beaucoup de recherches menant à l’implémentation actuelle de Prolog vinrent des effets du projet pour les ordinateurs de la cinquième génération qui utilisaient comme base une variante.

Prolog est basé sur le calcul des prédicats du premier ordre ; cependant il est restreint dans sa version initiale à n’accepter que les clauses de Horn (les versions modernes de Prolog acceptent des prédicats plus complexes, notamment avec le traitement de la négation par l'échec). L’exécution d’un programme Prolog est effectivement une application du théorème prouvant par résolution du premier ordre. Les concepts fondamentaux sont l’unification, la récursivité et le retour sur trace. L'algorithme de résolution de Prolog est basé sur une extension de la SLD-résolution.

Une des particularités de Prolog est que l'on peut construire une base de connaissances dans un ordre indéterminé. Prolog peut ensuite résoudre des séries de problèmes logiques relatifs à une telle base de connaissances (notion base de données déductive).

Les différents types de termes

Prolog n’emploie pas des types de données selon la manière habituelle des langages de programmation. Ceci est principalement dû au fait qu'en Prolog, il n'y a pas de distinction réelle entre les données du programme et le programme lui-même (principe de la programmation déclarative). Nous devons parler à ce propos des éléments lexicaux, appelés termes, et qui englobent les types suivants.

Atomes

Les textes constants sont introduits sous forme d’atomes. Un atome est une séquence consistant en lettres, nombres et sous-tirets, qui commence par une lettre minuscule. Habituellement, si un atome non alphanumérique est nécessaire, il est entouré d'apostrophes (par exemple '+' est un atome, + est un opérateur).

Nombres

La plupart des implémentations Prolog ne font pas de différence entre des nombres entiers et à virgule flottante.

Variables

Les variables sont indiquées en utilisant un ensemble de lettres, nombres et caractères de soulignement et commençant avec une lettre majuscule.

Par exemple "X3" et "Prix_Unitaire" sont des noms de variables.

Dans l’environnement Prolog, à la différence des langages de programmation procéduraux, une variable n’est pas un contenant auquel on peut affecter une valeur. Son comportement est plus proche d’une forme, initialement indéfinie, que l'on précise de plus en plus par unification. Une fois que la variable est unifiée, sa valeur ne peut plus être modifiée au sein d'une même branche d'évaluation (le retour sur trace permet toutefois de revenir sur cette unification).

La variable anonyme est écrite avec un tiret bas (_). Toute variable dont le nom commence par un tiret bas est également une variable anonyme.

Termes composés

Les termes composés sont les seules façons dont Prolog peut représenter des données complexes. Un terme composé consiste en une tête, aussi appelée foncteur (qui doit être un atome), et des paramètres (sans restriction de type). Le nombre de paramètres, aussi appelé arité du terme, est significatif. Un terme composé est identifié par sa tête et son arité, il est habituellement écrit comme foncteur/arité.

Exemples de termes composés :

  • aime(romeo,juliette)
Le foncteur est aime et l'arité 2, le terme composé s'écrit aime/2.
  • f(g(X),h(Y))
Le foncteur est f et l'arité 2, le terme composé s'écrit f/2.
  • initialisation
Le foncteur est initialisation et l'arité 0, le terme composé s'écrit initialisation/0. Un atome est donc un terme composé d'arité 0.

Listes

Une liste n’est pas un type de données isolé, car elle est définie par une construction récursive (utilisant le foncteur . d'arité 2, c'est donc au niveau de la représentation interne un terme composé) :

  1. l'atome [] est une liste vide ;
  2. si T est une liste et H est un élément, alors le terme '.'(H, T) est une liste.

Le premier élément, appelé la tête, est H, suivi par les contenus du reste de la liste, indiqué comme T ou queue. La liste [1, 2, 3] serait représentée en interne comme '.'(1, '.'(2, '.'(3, []))) Un raccourci de syntaxe est [H | T], lequel est surtout utilisé pour construire des règles. La totalité d’une liste peut être traitée en agissant sur le premier élément, et ensuite sur le reste de la liste, par récursivité.

Pour la facilité du programmeur, les listes peuvent être construites et déconstruites de diverses manières.

  • Énumération d'éléments : [abc, 1, f(x), Y, g(A, rst)]
  • Extraction de l'élément de tête : [abc | L1]
  • Extraction de plusieurs éléments de tête : [abc, 1, f(x) | L2]
  • Expansion du terme : '.'(abc, '.'(1, '.'(f(x), '.'(Y, '.'(g(A, rst), [])))))

Chaînes de caractères

Les chaînes de caractères sont en général écrites comme une séquence de caractères entourés par des apostrophes. Elles sont souvent représentées en interne par une liste de codes ASCII.

Page générée en 0.066 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise