Prolog Language
Data struktur
Sök…
listor
Listor är en speciell typ av sammansatt term . Listor definieras induktivt:
- atomen
[]är en lista som anger den tomma listan . - Om
Lsär en lista är termen'.'(L, Ls)också en lista.
Det finns en speciell syntax för att enkelt ange listor i Prolog:
- Listan
'.'(a, '.'(b, '.'(c, [])))kan också skrivas som[a,b,c]. - Termen
'.'(L, Ls)kan också skrivas som[L|Ls].
Dessa notationer kan kombineras på alla sätt. Till exempel är termen [a,b|Ls] en lista iff Ls är en lista.
Skapa listor
En lista bestående av bokstäver som är förenade med variabeln Lista:
?- List = [1,2,3,4].
List = [1, 2, 3, 4].
Bygg en lista genom att gå med på:
?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].
Bygga en lista med okända värden med den inbyggda length/2 :
?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].
Eftersom i Prolog allt är i huvudsak en term, uppför listor heterogena:
?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].
Detta innebär att en lista också kan innehålla andra listor, även kallade inre listor:
List = [[1,2],[3,[4]]].
par
I konvention används ofta funktorn (-)/2 för att beteckna elementpar i Prolog. Till exempel betecknar termen -(A, B) paret elementen A och B I Prolog definieras (-)/2 som en infix-operatör . Därför kan termen skrivas på samma sätt som AB .
Många vanligt tillgängliga predikat använder också denna syntax för att beteckna par. Exempel på detta är keysort/2 och pairs_keys_values/3 .
Föreningslistor
I alla seriösa Prolog-system finns associeringslistor tillgängliga för att möjliggöra snabbare än linjär åtkomst till en samling element. Dessa associeringslistor är vanligtvis baserade på balanserade träd som AVL-träd . Det finns ett offentligt bibliotek som heter library(assoc) som levereras med många Prolog-system och tillhandahåller O (log (N)) -operationer för att infoga, hämta och ändra element i en samling.
Villkor
På en mycket hög nivå har Prolog bara en enda datatyp, kallad term . I Prolog representeras all data av Prolog-termer. Villkor definieras induktivt:
- en atom är en term. Exempel på atomer är:
x,testoch'quotes and space'. - en variabel är en term. Variabler börjar med en stor bokstav eller understruk
_. - heltal och flytande punktnummer är termer. Exempel:
42och42.42. - en sammansatt term är en term, definierad induktivt enligt följande: Om
T1,T2, ...,T_när termer, är F (T1,T2, ...,T_n) också en term, där F kallas funktorn för den sammansatta termen.
Villkor med namngivna fält med bibliotek (post)
Biblioteket [record][1] ger möjlighet att skapa sammansatta termer med namngivna fält. Direktivet :- record/1 <spec> sammanställs till en samling predikat som initialiserar, ställer in och får fält i termen som definieras av <spec> .
Till exempel, kan vi definiera en point datastruktur med namngivna fälten x och 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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */