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:

  1. Listan '.'(a, '.'(b, '.'(c, []))) kan också skrivas som [a,b,c] .
  2. 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 , test och 'quotes and space' .
  • en variabel är en term. Variabler börjar med en stor bokstav eller understruk _ .
  • heltal och flytande punktnummer är termer. Exempel: 42 och 42.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.

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow