Prolog Aufgaben
This commit is contained in:
parent
4371dfe61c
commit
d989cb6a53
BIN
Logik und Logikprogrammierung - Prüfungsvorbereitung.pdf
(Stored with Git LFS)
BIN
Logik und Logikprogrammierung - Prüfungsvorbereitung.pdf
(Stored with Git LFS)
Binary file not shown.
@ -418,18 +418,70 @@
|
|||||||
\item $Gr=[4,5,6]$
|
\item $Gr=[4,5,6]$
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
% delete Funktion
|
||||||
|
delete(_, [ ], [ ]).
|
||||||
|
delete(X, [X|Xs], Xs).
|
||||||
|
delete(X, [Y|Ys], [Y|Zs]) :-
|
||||||
|
delete(X, Ys, Zs).
|
||||||
|
|
||||||
|
% append Funktion
|
||||||
|
append([ ], Xs, Xs).
|
||||||
|
append([X|Xs], Ys, [X|Zs]) :-
|
||||||
|
append(Xs, Ys, Zs).
|
||||||
|
|
||||||
|
% partition Funktion
|
||||||
|
partition([ ], E, Kl, Gr).
|
||||||
|
partition([K|R], E, Kl, Gr):-
|
||||||
|
K<E,
|
||||||
|
append(K, Kl, Kl),
|
||||||
|
partition(R, E, Kl, Gr).
|
||||||
|
partition([K|R], E, Kl, Gr):-
|
||||||
|
K>E,
|
||||||
|
append(K, Gr, Gr),
|
||||||
|
partition(R, E, Kl, Gr).
|
||||||
|
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
|
|
||||||
\part Das Prädikat $merge(L1,L2,L)$ soll zwei sortierte Listen mit ganzen Zahlen $L1$ und $L2$ zu einer sortierten Liste $L$ verschmelzen.
|
\part Das Prädikat $merge(L1,L2,L)$ soll zwei sortierte Listen mit ganzen Zahlen $L1$ und $L2$ zu einer sortierten Liste $L$ verschmelzen.
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
merge([ ], L2, L2).
|
||||||
|
merge(L1, [ ], L1).
|
||||||
|
merge([K1|R2], [K2|R2], L):-
|
||||||
|
K1>K2,
|
||||||
|
append(K2, L, L),
|
||||||
|
merge([K1|R1], R2, L).
|
||||||
|
merge([K1|R2], [K2|R2], L):-
|
||||||
|
K2=<K1,
|
||||||
|
append(K1, L, L),
|
||||||
|
merge(R1, [K2|R2], L).
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
|
|
||||||
\part Das Prädikat $listmerge(ListenListe, L)$ bekommt eine Liste sortierter Listen $ListenListe$ und soll sie zu einer sortierten Liste L verschmelzen. Das in Aufgabe b) definierte Prädikat $merge$ kann dabei verwendet werden.
|
\part Das Prädikat $listmerge(ListenListe, L)$ bekommt eine Liste sortierter Listen $ListenListe$ und soll sie zu einer sortierten Liste L verschmelzen. Das in Aufgabe b) definierte Prädikat $merge$ kann dabei verwendet werden.
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
listmerge([ ], L).
|
||||||
|
listmerge([K|R], L):-
|
||||||
|
merge(K, L, L2),
|
||||||
|
listmerge(R, L2).
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
|
|
||||||
\part Das Prädikat $am\_groesten(L, Max)$ soll das größte Element $Max$ einer Zahlenliste $L$ ermitteln. Falls $L$ leer ist, soll ,,nein'' geantwortet werden.
|
\part Das Prädikat $am\_groesten(L, Max)$ soll das größte Element $Max$ einer Zahlenliste $L$ ermitteln. Falls $L$ leer ist, soll ,,nein'' geantwortet werden.
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
am_groesten([], Max):-
|
||||||
|
fail.
|
||||||
|
am_groesten([K|R], Max):-
|
||||||
|
K>Max,
|
||||||
|
am_groesten(R, K).
|
||||||
|
am_groesten([K|R], Max):-
|
||||||
|
K=<Max,
|
||||||
|
am_groesten(R, Max).
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
|
|
||||||
\part Das Prädikat $am\_kuerzesten(ListenListe, L)$ soll aus einer Liste von $ListenListe$ die kürzeste Liste $L$ ermitteln. Dies soll möglichst effizient geschehen: \begin{itemize}
|
\part Das Prädikat $am\_kuerzesten(ListenListe, L)$ soll aus einer Liste von $ListenListe$ die kürzeste Liste $L$ ermitteln. Dies soll möglichst effizient geschehen: \begin{itemize}
|
||||||
@ -439,6 +491,15 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
Falls $ListenListe$ leer ist, soll ,,nein'' geantwortet werden.
|
Falls $ListenListe$ leer ist, soll ,,nein'' geantwortet werden.
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
am_kuerzesten([], L).
|
||||||
|
am_kuerzesten([K,R], L):-
|
||||||
|
kuerzer_als(K,L),
|
||||||
|
am_kuerzesten(R, K).
|
||||||
|
am_kuerzesten([K,R], L):-
|
||||||
|
!kuerzer_als(K,L),
|
||||||
|
am_kuerzesten(R, L).
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
\end{parts}
|
\end{parts}
|
||||||
|
|
||||||
@ -451,10 +512,50 @@
|
|||||||
\begin{parts}
|
\begin{parts}
|
||||||
\part Das Prädikat $enthalten(Baum, Zahl)$ bekommt einen binären Suchbaum $Baum$ sowie eine Zahl $Zahl$ und soll entscheiden, ob diese Zahl in Baum enthalten ist und die Antwort ,,ja'' oder ,,nein'' liefern.
|
\part Das Prädikat $enthalten(Baum, Zahl)$ bekommt einen binären Suchbaum $Baum$ sowie eine Zahl $Zahl$ und soll entscheiden, ob diese Zahl in Baum enthalten ist und die Antwort ,,ja'' oder ,,nein'' liefern.
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
baum(nil).
|
||||||
|
baum(Wurzel, Links, Rechts):-
|
||||||
|
baum(Links),
|
||||||
|
baum(Rechts).
|
||||||
|
|
||||||
|
ist_knoten(X, baum(X, Links, Rechts)).
|
||||||
|
ist_knoten(X, baum(Y, Links, Rechts)) :-
|
||||||
|
ist_knoten(X, Links).
|
||||||
|
ist_knoten(X, baum(Y, Links, Rechts)) :-
|
||||||
|
ist_knoten(X, Rechts).
|
||||||
|
|
||||||
|
enhalten(baum(X, Links, Rechts), X).
|
||||||
|
enhalten(baum(Y, Links, Rechts), X):-
|
||||||
|
enthalten(Links, X).
|
||||||
|
enthalten(baum(Y, Links, Rechts), X):-
|
||||||
|
enthalten(Rechts, X).
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
|
|
||||||
\part Das Prädikat $flattern(Baum,Liste)$ soll aus einem gegebenen Suchbaum $Baum$ die Liste $Liste$ aller der im Baum enthaltenen Zahlen in aufsteigender sortierter Reihenfolge liefern.
|
\part Das Prädikat $flatten(Baum,Liste)$ soll aus einem gegebenen Suchbaum $Baum$ die Liste $Liste$ aller der im Baum enthaltenen Zahlen in aufsteigender sortierter Reihenfolge liefern.
|
||||||
\begin{solution}
|
\begin{solution}
|
||||||
|
\begin{lstlisting}
|
||||||
|
flatten([], []).
|
||||||
|
flatten(baum(X, Links, Rechts), L):-
|
||||||
|
insert(X, L, L2),
|
||||||
|
flatten(Links, L2),
|
||||||
|
flatten(Rechts, L2).
|
||||||
|
flatten([], L):-
|
||||||
|
insertionSort(L, []).
|
||||||
|
|
||||||
|
insert(X, [], [X]).
|
||||||
|
insert(X, [X1|L1], [X, X1|L1]):-
|
||||||
|
X=<X1,
|
||||||
|
!.
|
||||||
|
insert(X, [X1|L1], [X1|L]):-
|
||||||
|
insert(X, L1, L).
|
||||||
|
|
||||||
|
insertionSort([], []):-
|
||||||
|
!.
|
||||||
|
insertionSort([X|L], S):-
|
||||||
|
insertionSort(L, S1),
|
||||||
|
insert(X, S1, S).
|
||||||
|
\end{lstlisting}
|
||||||
\end{solution}
|
\end{solution}
|
||||||
\end{parts}
|
\end{parts}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user