Lösungen

This commit is contained in:
2026-01-04 15:14:47 +01:00
parent 1251fe1263
commit eeba612299
5 changed files with 151 additions and 0 deletions

BIN
Praktikum1.pl Normal file

Binary file not shown.

BIN
Praktikum2.pl Normal file

Binary file not shown.

51
Praktikum3.pl Normal file
View File

@@ -0,0 +1,51 @@
% Präfix-Prädikat aus Übungsaufgabe 20 b)
prefix([], _).
prefix([H|T], [H|Ys]) :- prefix(T, Ys).
% Reverse-Prädikat des Prolog-Systems
reverse([], []).
reverse([H|T], R) :- reverse(T, RT), append(RT, [H], R).
% Postfix-Prädikat
postfix(Xs, Ys) :-
reverse(Xs, RXs),
reverse(Ys, RYs),
prefix(RXs, RYs).
% Postfix mit append
postfix(Xs, Ys) :-
append(_, Xs, Ys).
% ----------------------------------------------------%
% Definition eines Binärbaums
% Ein leerer Baum ist ein leerer Baum
tree(empty).
tree(node(_, Left, Right)) :- tree(Left), tree(Right).
% Überprüfung, ob ein Element im Baum enthalten ist
membertree(X, node(X, _, _)).
membertree(X, node(_, Left, _)) :- membertree(X, Left).
membertree(X, node(_, _, Right)) :- membertree(X, Right).
% ----------------------------------------------------%
% Preorder
preorder(empty, []).
preorder(node(X, Left, Right), Ys) :-
preorder(Left, Ls),
preorder(Right, Rs),
append([X|Ls], Rs, Ys).
% Postorder
postorder(empty, []).
postorder(node(X, Left, Right), Ys) :-
postorder(Left, Ls),
postorder(Right, Rs),
append(Ls, Rs, Temp),
append(Temp, [X], Ys).
% Roots
roots([], []).
roots([empty|Xbs], Ys) :- roots(Xbs, Ys).
roots([node(X, _, _)|Xbs], [X|Ys]) :- roots(Xbs, Ys).

52
Praktikum4.pl Normal file
View File

@@ -0,0 +1,52 @@
% Endliche Zustandsmenge
zustand(z0).
zustand(z1).
zustand(z2).
zustand(z3).
% Eingabealphabet
sigma(a).
sigma(b).
% Zustandsübergangsrelationen
delta(z0, a, z0).
delta(z0, b, z1).
delta(z1, a, z2).
delta(z1, b, z1).
delta(z2, a, z2).
delta(z2, b, z2z3).
delta(z2z3, a, z2z3).
delta(z2z3, b, z2z3).
% Startzustand
start(z0).
% Endzustand
end(z2).
end(z2z3).
% Menge der Wörter über Sigma
sigma_stern([]).
sigma_stern([A|Ws]) :-
sigma_stern(Ws),
sigma(A).
% Erweiterung der Transitionsrelation delta_stern
delta_stern(Zustand, [], Zustand).
delta_stern(AktZ, [A|Ws], NeuZ) :-
sigma(A), delta(AktZ, A, ZwischenZ),
sigma_stern(Ws), delta_stern(ZwischenZ, Ws, NeuZ).
% Überprüfung, ob ein Wort von dem NEA akzeptiert wird
lvonN(W) :-
start(StartZustand),
delta_stern(StartZustand, W, EndZustand),
end(EndZustand).

48
Praktikum5.pl Normal file
View File

@@ -0,0 +1,48 @@
% Startzustand des PDA
start(z).
% Zustände
state(z).
% Eingabealphabet
sigma(a).
sigma(b).
% Kelleralphabet
gamma(a).
gamma(b).
gamma(#).
% Übergangsfunktion: delta(FromState, ReadSymbol, PopSymbol, ToState, PushSymbols)
delta(z, a, a, z, []).
delta(z, b, b, z, []).
delta(z, nix, #, z, [a, #, b, #]).
delta(z, nix, #, z, [b, #, a, #]).
delta(z, nix, #, z, []).
% sigma_stern: Akzeptiert leere Eingabe oder Eingabe, die aus Symbolen des Eingabealphabets besteht
sigma_stern([]).
sigma_stern([W|Ws]) :- sigma_stern(Ws), sigma(W).
% Einzelschrittrelation es
es(S, [W|Ws], [Top|Stacks], NewS, Ws, NewStacks) :-
delta(S, W, Top, NewS, ToStacks),
append(ToStacks, Stacks, NewStacks).
es(S, Ws, [Top|Stacks], NewS, Ws, NewStacks) :-
delta(S, nix, Top, NewS, ToStacks),
append(ToStacks, Stacks, NewStacks).
% Transitiver Abschluss es_plus
es_plus(S, Ws, Stacks, NewS, NewWs, NewStacks) :-
es(S, Ws, Stacks, NewS, NewWs, NewStacks).
es_plus(S, Ws, Stacks, NewS, NewWs, NewStacks) :-
es(S, Ws, Stacks, S1, W1, NewStack1),
es_plus(S1, W1, NewStack1, NewS, NewWs, NewStacks).
% Akzeptanzbedingung
lvonM(Ws) :-
sigma_stern(Ws),
start(S),
es_plus(S, Ws, [#], _, [], []).