Übungsaufgaben Listen in Prolog

Aus Informatik
Wechseln zu: Navigation, Suche

Aufgabe 1

Welche Antworten liefern die folgenden Anfragen?

a) [X|Y] = [rhein,elbe,weser,mosel].
b) [X|[weser,mosel]] = [elbe,weser,mosel].
c) [X|[weser,mosel]] = [rhein,elbe,weser,mosel].
d) [Z|Rs] = [1,2,3,4,5,6].
e) [3,4,5] = [X|Rs].
f) [Kopf|Rs] = [a].
g) [K|Rs] = [].
h) [K|Rs] = [[]].
i) [A|E] = [[1,2],[345]].
j) [X,Y|Z] = [[1],2,3,[6,7],8].
k) [X,Y,Z|U] = [1,2,3,4].
l) [X,Y,Z|U] = [1,[2,3],4,5,6,7].
m) [[A,B]|C] = [a,b,c,d,e,f].
n) [A|[B|[C|[]]]] = [a,b,c].
o) [1,A,2,B] = [C,a,D,b].



Aufgabe 2

Gesucht ist ein Prädikat anzahl_elemente(L,N), welches die Anzahl der Elemente der Liste L ausgibt.



Aufgabe 3

Schreiben Sie eine Regel zum zeilenweisen Ausgeben der Elemente einer Liste. Verwenden Sie dabei das write-Prädikat und das nl-Prädikat.



Aufgabe 4

Das Prädikat gleich(L1,L2) soll prüfen, ob zwei Listen elementweise gleich sind.

?- gleich([x,y,2],[x,y,2]).

yes



Aufgabe 5

Mit dem Prädikat präfix(L1,L2) soll festgestellt werden können, ob eine Liste L1 den Beginn einer zweiten Liste L2 darstellt.

?- präfix([a,3],[a,3,b,x]).

yes

Gesucht ist ebenfalls ein Prädikat suffix(L1,L2), welches überprüft, ob L1 das Ende der Liste L2 darstellt.



Aufgabe 6

Geben Sie ein Prädikat summe(L) an, das die Elemente einer Zahlenliste summiert.



Aufgabe 7

Definieren Sie ein Prädikat anzahl(X,L,Anzahl), mit dem Häufigkeit des Elements X in der Liste L bestimmt werden kann:

?- anzahl(a,[q,a,w,s,a,y,a,x],Anzahl).

Anzahl = 3;



Aufgabe 8

Aus einer Zahlenliste sollen alle negativen Zahlen gestrichen werden.



Aufgabe 9

Das Verdopplungsprädikat doppel(L1,L2) soll eine Liste L2 liefern, die alle Elemente der Liste L1 doppelt enthält.

?- doppel([x,5,a],L).

L = [x,x,5,5,a,a];



Aufgabe 10

Es sollen Elemente aus einer Liste gelöscht werden.

  1. Das Prädikat loeschen(X,L,LNeu) löscht alle Elemente X aus der Liste L und stellt die neue Liste in LNeu dar.
  2. Das Prädikat loeschen1(X,L,LNeu) löscht das erste vorkommende Elemente X aus der Liste L und stellt die neue Liste in LNeu dar.



Aufgabe 11

Das Prädikat revers(L1,L2) soll in der Liste L2 die reverse Liste von L1 darstellen.



Aufgabe 12

Ki labyrinth.png
Das dargestellte Labyrinth stellt den Grundriss eines Hauses dar. Sie befinden sich in einem bestimmten Raum (z. B. a) und wollen in einen anderen (z. B. f). Welchen Weg müssen Sie gehen? Dieses Problem soll durch ein Prolog-Programm gelöst werden.

Das Labyrinth kann z. B. durch das Prädikat weg(X,Y). beschrieben werden, welches die möglichen Wege zwischen zwei Räumen erfasst:

weg(a,b).
weg(b,c).
...

Benötigt wird nun ein Prädikat sucheWeg(X,Y), welches uns einen Weg von X zu Y sucht. Dabei besteht jedoch die Gefahr einer Endlosschleife (z. B. e,d,c,e,d,c,...). Solche Endlosschleifen lassen sich vermeiden, wenn die schon besuchten Räume in einer Liste gespeichert werden. Einen neuen Raum betritt man nur, wenn er noch nicht in der Liste enthalten ist ...