diff --git a/Praktikum1.pl b/Praktikum1.pl new file mode 100644 index 0000000..855beff Binary files /dev/null and b/Praktikum1.pl differ diff --git a/Praktikum2.pl b/Praktikum2.pl new file mode 100644 index 0000000..b680629 Binary files /dev/null and b/Praktikum2.pl differ diff --git a/Praktikum3.pl b/Praktikum3.pl new file mode 100644 index 0000000..ea77ed8 --- /dev/null +++ b/Praktikum3.pl @@ -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). \ No newline at end of file diff --git a/Praktikum4.pl b/Praktikum4.pl new file mode 100644 index 0000000..8932cdc --- /dev/null +++ b/Praktikum4.pl @@ -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). diff --git a/Praktikum5.pl b/Praktikum5.pl new file mode 100644 index 0000000..b0fd7ba --- /dev/null +++ b/Praktikum5.pl @@ -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, [#], _, [], []). \ No newline at end of file