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:

  1. La lista '.'(a, '.'(b, '.'(c, []))) può anche essere scritta come [a,b,c] .
  2. 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 , test e '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: 42 e 42.42 .
  • un termine composto è un termine, definito induttivamente come segue: Se T1 , T2 , ..., T_n sono 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.

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow