Prolog

Bases de Prolog

  • Faits: Déclarations simples, par exemple :

    parent(anne, bob).
    
  • Règles: Formules logiques pour définir des relations, ex :

    grandparent(X, Z) :- parent(X, Y), parent(Y, Z).
    
  • Requêtes: Pour interroger la base, ex :

    ?- grandparent(anne, Who).
    
  • Variables: Elles commencent par une majuscule (ex : X, Y).

Récursion en Prolog

  • Concept: Une règle récursive s'appelle elle-même pour traiter des cas répétés.

  • Exemple classique: Calcul de la longueur d'une liste.

    % Cas de base
    longueur([], 0).
    
    % Cas récursif
    longueur([_|T], N) :-
        longueur(T, N1),
        N is N1 + 1.
    
  • Récursion terminale: Si le dernier appel d'une fonction est la récursion, ce qui peut optimiser l'exécution.

  • La coupe (!):

    • C'est un opérateur qui "coupe" l'exploration de solutions alternatives.

    • En gros, c'est comme dire "ok, on arrête de chercher d'autres réponses ici".

    • Exemple simple :

      membre(X, [X|_]) :- !.
      membre(X, [_|T]) :- membre(X, T).
      

Manipulation de matrices

Pour manipuler des matrices (représentées comme des listes de listes), voici quelques astuces :

  • Une matrice est [[Ligne1], [Ligne2], ...].

  • Pour accéder à un élément, on peut définir des prédicats de parcours.

Exemple pour récupérer la première ligne et la première colonne :

% Récupère la première ligne d'une matrice
premiere_ligne([L|_], L).

% Récupère le premier élément d'une liste
premier_element([E|_], E).

% Récupère l'élément en position (0,0) dans une matrice
element_00(Mat, E) :-
    premiere_ligne(Mat, L),
    premier_element(L, E).