0% fanden dieses Dokument nützlich (0 Abstimmungen)
4 Ansichten32 Seiten

File 4

Das Dokument behandelt die Grundlagen von Listen in Prolog, einschließlich ihrer Definition als rekursive Datenstrukturen zur Darstellung geordneter Mengen von Elementen. Es beschreibt die Implementierung von Listen, deren Länge, sowie die Verwendung von Prädikaten wie 'member' und 'append' zur Manipulation von Listen. Zudem werden Aufgaben zur Vertiefung des Verständnisses und eine benutzerfreundliche Darstellung von Listen in Prolog vorgestellt.

Hochgeladen von

negabe8139
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
4 Ansichten32 Seiten

File 4

Das Dokument behandelt die Grundlagen von Listen in Prolog, einschließlich ihrer Definition als rekursive Datenstrukturen zur Darstellung geordneter Mengen von Elementen. Es beschreibt die Implementierung von Listen, deren Länge, sowie die Verwendung von Prädikaten wie 'member' und 'append' zur Manipulation von Listen. Zudem werden Aufgaben zur Vertiefung des Verständnisses und eine benutzerfreundliche Darstellung von Listen in Prolog vorgestellt.

Hochgeladen von

negabe8139
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

LISTEN

Programmierkurs Prolog – p.1


Liste

Listen sind rekursive Datenstrukturen, die dazu dienen geordnete


Mengen von Elementen zu beschreiben.

Man kann sich Listen in Prolog als Behälter vorstellen, die


Elementen verschiedener Typen behalten können.

Die Reihenfolge, in der Behälter gefüllt werden, ist wichtig

Programmierkurs Prolog – p.2


Beispiele



b
 





c





c

 


 


a
c
b i

 



c


 


g(a)
 


 




Programmierkurs Prolog – p.3


Numeral

Die folgende rekursive Definition definiert eine natürliche Zahl:

1. 0 ist eine natürliche Zahl

2. succ(X) ist eine natürliche Zahl wenn X eine natürliche Zahl ist

Programmierkurs Prolog – p.4


Definition von Liste

Die folgende rekursive Definition definiert eine Liste in Prolog:

1. [] ist eine Liste

2. .(T,L) ist eine liste wenn L eine Liste ist und T ein belibiger Term

T heisst head der Liste, L heisst tail.

Programmierkurs Prolog – p.5


Listen in Prolog

/
Das Predikat liste implementiert die folgende
rekursive Definition von Liste:


1. ist eine Liste


2. .(T,L) iste eine Liste wenn L eine Liste ist
/
% Basisklausel
liste([]).

% Recursive Klausel

liste(.(T,L)) :- liste(L).

Programmierkurs Prolog – p.6


Beispiele


a,b,c .(a, .(b, .(c, [])))




a b,c .(a, .(.(b,.(c,[])),[]))




[]




.([],[])


c, i ,g(a) .(c,.(.(i,[]),.(g(a),[])))


Programmierkurs Prolog – p.7


Listen als Bäume

a
b


a
c

c []

Programmierkurs Prolog – p.8


Länge einer Liste

/
Das Predikat count length implementiert die folgende
rekursive Definition von Länge (||) einer Liste:


1. | | = 0
2. |.(T,L)| = 1 + |L|
/
% Basisklausel
count length([],0).

% Recursive Klausel

count length(.(T,L), succ(X)) :- count length(L,X).

Programmierkurs Prolog – p.9



Studenten = martin, anna, hans

Programmierkurs Prolog – p.10



Studenten = martin, anna, hans
In Prolog:

Studenten = .(martin, .(anna, .(hans, [])))).

Programmierkurs Prolog – p.11



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).

Programmierkurs Prolog – p.12



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).

Programmierkurs Prolog – p.13



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)

Programmierkurs Prolog – p.14



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).

Programmierkurs Prolog – p.15



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)

Programmierkurs Prolog – p.16



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).

Programmierkurs Prolog – p.17



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)

Programmierkurs Prolog – p.18



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)
7. count length([], I3)

Programmierkurs Prolog – p.19



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)
7. count length([], I3)
8. count length([], 0).

Programmierkurs Prolog – p.20



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)
7. count length([], I3)
8. count length([], 0).
9. I3 = 0

Programmierkurs Prolog – p.21



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)
7. count length([], I3)
8. count length([], 0).
9. I3 = 0
10. I2 = 1

Programmierkurs Prolog – p.22



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)
7. count length([], I3)
8. count length([], 0).
9. I3 = 0
10. I2 = 1
11. I1 = 2

Programmierkurs Prolog – p.23



Studenten = martin, anna, hans
In Prolog:
Studenten = .(martin, .(anna, .(hans, [])))).

0. count length(Studenten,N).
1. count length(.(martin, .(anna, .(hans, []))), N).
2. N = 1 + I1 =succ(I1)
3. count length(.(anna, .(hans, [])), I1).
4. I1 = 1 + I2 = succ(I2)
5. count length(.(hans, []), I2).
6. I2 = 1 + I3 = succ(I3)
7. count length([], I3)
8. count length([], 0).
9. I3 = 0
10. I2 = 1
11. I1 = 2
12. N = 3
Programmierkurs Prolog – p.24
Aufgaben

1. Definiere ein Predikat länger then/2, das als Argumente zwei


Listen nimmt und entscheidet ob die erste länger als die zweite ist.
(Tipp: ähnlich wie greater then)

2. Definiere ein Predikat append/3, das drei Listen als Argumente


nimmt und die Konkatenation der ersten zwei Listen in dem dritten
Argument speichert. Zum Beispiel bei der Anfrage
?- append(.(a,.(b,[])),.(1,.(2,[])),X)
soll Prolog soll X = .(a,.(b,.(1,.(2,[])))) antworten.
(Tipp: ähnlich wie add)

3. Definiere ein Predikat member/2, das als Argumente ein Term und
eine Liste nimmt und testet ob der Term in der Liste enthalten ist.

Programmierkurs Prolog – p.25


Alternative Darstellung für Listen

?- .(a, .(b,[])) = X.
X = [a,b]

Listen können in Prolog ähnlich wie Mengen geschrieben werden:


[a,b,c,[1]]


 
 
 
 












 

 


Programmierkurs Prolog – p.26


Prolog stellt eine benutzerfreundlichere Darstellung für Listen zur
Verfügung, die wie folgt definiert ist:

1. [] ist eine Liste

2. [H T] ist eine Liste wenn T eine Liste ist.

Programmierkurs Prolog – p.27


Zugriff auf Listen

[a,b,c]= [X T] [g(a)] = [X Y]
X=a X = g(a)
T = [b,c] Y = []

[a,b,c] = [X,Y T] = [X T]
X=a no
Y=b
T = [c]

Programmierkurs Prolog – p.28


Die anonyme Variable _

Jedes vorkommen dieser Variable ist unhabängig von den anderen


Vorkommen, d.h jedes mal das diese Variable vorkommt wird sie
neu instanziiert.

Die Bindungen dieser Variable sind unsicthbar, d.h. sie werden


nicht gespeichert und werden auch nicht von Prolog ausgegeben.

?- f(a,b,c)=f(X,b,X) ?- [a,b,c,d] = [H T]
no H=a
T = [b,c,d]
?- f(a,b,c)=f( ,b, )
yes ?- [a,b,c,d] = [H ]
H=a

Programmierkurs Prolog – p.29


Member

/
Das Predikat member/2 testet ob ein Objekt
sich in einer Liste befindet
/
% Basisklausel
member(X,[X ]).

% Recursive Klausel
member(X, [Y T] :- member(X,T).

Programmierkurs Prolog – p.30


Append

/
Das Predikat append/3 konkateniert zwei
Listen
/
% Basisklausel
append([],X,X).

% Recursive Klausel
append([X T],Y,[X C]) :- append(T,Y,C).

Programmierkurs Prolog – p.31


Zusammenfassung

Listen sind rekursive Datenstrukturen mit denen geordnete


Mengen von Objekten dargestellt werden können

Anonyme variable

Nächste Woche: Arithmetik und mehr zu Listen.


Übungsaufgaben: Das Übungsblatt ist auf der Web-Seite.

Programmierkurs Prolog – p.32

Das könnte Ihnen auch gefallen