Prolog Language
Structures de données
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
Lsest 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:
- La liste
'.'(a, '.'(b, '.'(c, [])))peut aussi être écrite comme[a,b,c]. - 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,testet'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:
42et42.42. - un terme composé est un terme défini inductivement comme suit: Si
T1,T2, ...,T_nsont 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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */