Suche…


Listen

Listen sind eine besondere Art zusammengesetzter Begriffe . Listen werden induktiv definiert:

  • Das Atom [] ist eine Liste, die die leere Liste bezeichnet .
  • Wenn Ls eine Liste ist, ist der Begriff '.'(L, Ls) ebenfalls eine Liste.

Es gibt eine spezielle Syntax, um Listen bequem in Prolog zu bezeichnen:

  1. Die Liste '.'(a, '.'(b, '.'(c, []))) kann auch als [a,b,c] .
  2. Der Begriff '.'(L, Ls) kann auch als [L|Ls] .

Diese Notationen können beliebig kombiniert werden. Beispielsweise ist der Begriff [a,b|Ls] eine Liste, wenn Ls eine Liste ist.

Listen erstellen

Eine Liste bestehend aus Literalen, die mit der Variablen List vereinheitlicht sind:

?- List = [1,2,3,4].
List = [1, 2, 3, 4].

Erstellen einer Liste durch Berücksichtigung von:

?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].

Erstellen einer Liste unbekannter Werte mit der integrierten length/2 :

?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].

Da in Prolog alles im Wesentlichen ein Begriff ist, verhalten sich Listen heterogen:

?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].

Das heißt, eine Liste kann auch andere Listen enthalten, auch innere Listen genannt:

List = [[1,2],[3,[4]]].

Paare

Der Konnektor (-)/2 wird häufig verwendet, um Elementpaare in Prolog zu bezeichnen. Zum Beispiel bezeichnet der Begriff -(A, B) das Elementpaar A und B In Prolog ist (-)/2 als Infixoperator definiert. Daher kann der Begriff gleichbedeutend als AB .

Viele allgemein verfügbare Prädikate verwenden diese Syntax auch, um Paare zu kennzeichnen. Beispiele hierfür sind keysort/2 und pairs_keys_values/3 .

Assoziationslisten

In allen seriösen Prolog-Systemen stehen Verknüpfungslisten zur Verfügung, die einen schnelleren als linearen Zugriff auf eine Sammlung von Elementen ermöglichen. Diese Zuordnungslisten basieren normalerweise auf ausgeglichenen Bäumen wie AVL-Bäumen . Es gibt eine Public-Domain-Bibliothek namens library(assoc) , die im library(assoc) vieler Prolog-Systeme enthalten ist und O (log (N)) library(assoc) zum Einfügen, Abrufen und Ändern von Elementen in eine Sammlung bietet.

Bedingungen

Auf einer sehr hohen Ebene hat Prolog nur einen einzigen Datentyp, der als Begriff bezeichnet wird . In Prolog werden alle Daten durch Prolog-Ausdrücke dargestellt. Begriffe werden induktiv definiert:

  • ein Atom ist ein Begriff. Beispiele für Atome sind: x , test und 'quotes and space' .
  • Eine Variable ist ein Begriff. Variablen beginnen mit einem Großbuchstaben oder einem Unterstrich _ .
  • Ganzzahlen und Fließkommazahlen sind Begriffe. Beispiele: 42 und 42.42 .
  • Ein zusammengesetzter Begriff ist ein Begriff, der induktiv wie folgt definiert ist: Wenn T1 , T2 , ..., T_n Terme sind, dann ist auch F ( T1 , T2 , ..., T_n ) ein Begriff, wobei F als Funktor bezeichnet wird der zusammengesetzte Begriff.

Begriffe mit benannten Feldern unter Verwendung der Bibliothek (Datensatz)

Die Bibliothek [record][1] bietet die Möglichkeit, zusammengesetzte Begriffe mit benannten Feldern zu erstellen. Die Direktive :- record/1 <spec> kompiliert eine Sammlung von Prädikaten, die Felder in dem durch <spec> definierten Begriff initialisieren, festlegen und <spec> .

Zum Beispiel können wir eine definieren point - Datenstruktur mit dem Namen Felder x und 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow