Recherche…


Des listes

Les listes sont un type particulier de terme composé . Les listes sont définies par induction:

  • l'atome [] est une liste indiquant la liste vide .
  • si Ls est une liste, alors le terme '.'(L, Ls) est également une liste.

Il existe une syntaxe spéciale pour dénoter les listes de manière pratique dans Prolog:

  1. La liste '.'(a, '.'(b, '.'(c, []))) peut aussi être écrite comme [a,b,c] .
  2. Le terme '.'(L, Ls) peut aussi être écrit comme [L|Ls] .

Ces notations peuvent être combinées de n'importe quelle manière. Par exemple, le terme [a,b|Ls] est une liste si Ls est une liste.

Créer des listes

Une liste de littéraux unifiés avec la variable List:

?- List = [1,2,3,4].
List = [1, 2, 3, 4].

Construire une liste en consommant:

?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].

Construire une liste de valeurs inconnues à l'aide de la length/2 intégrée length/2 :

?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].

Puisque dans Prolog tout est essentiellement un terme, les listes se comportent de manière hétérogène:

?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].

Cela signifie qu'une liste peut également contenir d'autres listes, également appelées listes internes:

List = [[1,2],[3,[4]]].

Paires

Par convention, le foncteur (-)/2 est souvent utilisé pour désigner des paires d'éléments dans Prolog. Par exemple, le terme -(A, B) désigne la paire d'éléments A et B Dans Prolog, (-)/2 est défini comme un opérateur infixe . Par conséquent, le terme peut être écrit de manière équivalente à AB .

De nombreux prédicats couramment utilisés utilisent également cette syntaxe pour désigner des paires. Des exemples de ceci sont keysort/2 et pairs_keys_values/3 .

Listes d'association

Dans tous les systèmes Prolog sérieux, les listes d'associations sont disponibles pour permettre un accès plus rapide que linéaire à une collection d'éléments. Ces listes d'association sont généralement basées sur des arbres équilibrés tels que des arbres AVL . Une bibliothèque de domaine public appelée library(assoc) avec de nombreux systèmes Prolog et fournit des opérations O (log (N)) pour insérer, récupérer et modifier des éléments dans une collection.

termes

À un très haut niveau, Prolog ne possède qu'un seul type de données, appelé terme . Dans Prolog, toutes les données sont représentées par des termes Prolog. Les termes sont définis par induction:

  • un atome est un terme. Des exemples d'atomes sont: x , test et 'quotes and space' .
  • une variable est un terme. Les variables commencent par une lettre majuscule ou un trait de soulignement _ .
  • les entiers et les nombres à virgule flottante sont des termes. Exemples: 42 et 42.42 .
  • un terme composé est un terme défini inductivement comme suit: Si T1 , T2 , ..., T_n sont des termes, alors F ( T1 , T2 , ..., T_n ) est aussi un terme, où F est appelé le foncteur de le terme composé.

Termes avec champs nommés utilisant la bibliothèque (enregistrement)

La bibliothèque [record][1] permet de créer des termes composés avec des champs nommés. La directive :- record/1 <spec> compile en une collection de prédicats qui initialisent, définissent et obtiennent des champs dans le terme défini par <spec> .

Par exemple, nous pouvons définir une structure de données point avec les champs nommés x et y :

:- use_module(library(record)).

:- record point(x:integer=0,
                y:integer=0).

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

?- default_point(Point), point_x(Point, X), set_x_of_point(10, Point, Point1).
Point = point(0, 0),
X = 0,
Point1 = point(10, 0).

?- make_point([y(20)], Point). 
Point = point(0, 20).

?-  is_point(X). 
false.

?- is_point(point(_, _)).
false.

?- is_point(point(1, a)).
false.

?- is_point(point(1, 1)).
true.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow