Prolog Language
Strutture dati
Ricerca…
elenchi
Le liste sono un tipo speciale di termine composto . Le liste sono definite in modo induttivo:
- l'atomo
[]è una lista, che indica la lista vuota . - se
Lsè una lista, allora il termine'.'(L, Ls)è anche una lista.
C'è una sintassi speciale per denotare gli elenchi comodamente in Prolog:
- La lista
'.'(a, '.'(b, '.'(c, [])))può anche essere scritta come[a,b,c]. - Il termine
'.'(L, Ls)può anche essere scritto come[L|Ls].
Queste annotazioni possono essere combinate in qualsiasi modo. Ad esempio, il termine [a,b|Ls] è una lista se Ls è una lista.
Creare liste
Una lista di letterali unificati con la variabile List:
?- List = [1,2,3,4].
List = [1, 2, 3, 4].
Costruire una lista consing:
?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].
Costruire un elenco di valori sconosciuti utilizzando la length/2 integrata length/2 :
?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].
Poiché in Prolog tutto è essenzialmente un Termine, le liste si comportano in modo eterogeneo:
?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].
Ciò significa che un elenco può contenere anche altri elenchi, chiamati anche elenchi interni:
List = [[1,2],[3,[4]]].
Pairs
Per convenzione, il functor (-)/2 è spesso usato per denotare coppie di elementi in Prolog. Ad esempio, il termine -(A, B) indica la coppia di elementi A e B In Prolog, (-)/2 è definito come operatore infisso . Pertanto, il termine può essere scritto in modo equivalente come AB .
Molti predicati comunemente disponibili utilizzano anche questa sintassi per indicare coppie. Esempi di questo sono keysort/2 e pairs_keys_values/3 .
Liste di associazioni
In tutti i seri sistemi Prolog, sono disponibili elenchi di associazioni che consentono un accesso più rapido e lineare a una raccolta di elementi. Questi elenchi di associazioni si basano in genere su alberi bilanciati come gli alberi AVL . Esiste una libreria di dominio pubblico chiamata library(assoc) che viene fornita con molti sistemi Prolog e che fornisce operazioni O (log (N)) per l'inserimento, il recupero e la modifica di elementi in una raccolta.
condizioni
A un livello molto alto, Prolog ha solo un singolo tipo di dati, chiamato termine . In Prolog, tutti i dati sono rappresentati dai termini di Prolog. I termini sono definiti in modo induttivo:
- un atomo è un termine. Esempi di atomi sono:
x,teste'quotes and space'. - una variabile è un termine. Le variabili iniziano con una lettera maiuscola o underscore
_. - numeri interi e numeri in virgola mobile sono termini. Esempi:
42e42.42. - un termine composto è un termine, definito induttivamente come segue: Se
T1,T2, ...,T_nsono termini, quindi F (T1,T2, ...,T_n) è anche un termine, dove F è chiamato il funtore di il termine composto.
Termini con campi denominati utilizzando la libreria (record)
La libreria [record][1] offre la possibilità di creare termini composti con campi denominati. La direttiva :- record/1 <spec> compila in una raccolta di predicati che inizializzano, impostano e ottengono campi nel termine definito da <spec> .
Ad esempio, possiamo definire una struttura di dati point con campi denominati x e 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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */