Lösungen
This commit is contained in:
BIN
Praktikum1.pl
Normal file
BIN
Praktikum1.pl
Normal file
Binary file not shown.
BIN
Praktikum2.pl
Normal file
BIN
Praktikum2.pl
Normal file
Binary file not shown.
51
Praktikum3.pl
Normal file
51
Praktikum3.pl
Normal 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
52
Praktikum4.pl
Normal 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
48
Praktikum5.pl
Normal 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, [#], _, [], []).
|
||||
Reference in New Issue
Block a user