51 lines
2.8 KiB
Prolog
51 lines
2.8 KiB
Prolog
% !!! keine Variable mit Z
|
||
|
||
% Aufgabe 1 --------------------------------------------------------------
|
||
|
||
% a)
|
||
|
||
linListe(nil).
|
||
linListe(list(_, Xs)) :- linListe(Xs).
|
||
|
||
% b)
|
||
|
||
|
||
mem(X, list(X, _)).
|
||
mem(X, list(_, Ys)) :- mem(X, Ys).
|
||
|
||
app(nil, Ys, Ys).
|
||
app(list(X, Xs), Ys, list(X, Zs)) :- app(Xs, Ys, Zs).
|
||
|
||
% Ys=[[...],Zs] Zs=[Xs,[...]] => [[...],[Xs,[...]]]
|
||
infix(Xs, Ys) :- app(_, Zs, Ys), app(Xs, _, Zs).
|
||
|
||
% attach(Xs,X,Ys) Ys=list(X,Xs).
|
||
attach(nil, X, list(X, nil)).
|
||
% |-- Z --|
|
||
% Xs X list(H,list(X,T))
|
||
attach(list(H, T), X, list(H, Z)) :- attach(T, X, Z).
|
||
|
||
rev(nil, nil).
|
||
rev(list(X, Xs), Ys) :- rev(Xs, Zs), app(Zs, list(X, nil), Ys).
|
||
|
||
% Aufgabe 2 ----------------------------------------------------------------
|
||
|
||
% aus Aufgabe 21
|
||
binbaum(empty).
|
||
binbaum(node(_, LTB, RTB)):- binbaum(LTB), binbaum(RTB).
|
||
|
||
%Neuer Baum Xneub
|
||
construct(Root,LTB,RTB,node(Root, LTB, RTB)):- binbaum(LTB), binbaum(RTB).
|
||
|
||
%Notwendig zur Addition der einzelnen Knoten des Baumes
|
||
add(o, X, X).
|
||
add(s(X), Y, s(Z)):- add(X, Y, Z).
|
||
|
||
% Knotenanzahl N vom Baum, Baum links und rechts wird überprüft,
|
||
% Knotenanazhl von jeder Seite werden am Ende addiert, nachdem jeder
|
||
% einzelne Knoten in jedem Baum addiert wurde
|
||
|
||
knotenanz(empty, o).
|
||
knotenanz(node(_, LTB, RTB), s(N)):-
|
||
knotenanz(LTB, LN), knotenanz(RTB, RN), add(LN, RN, N),
|
||
binbaum(LTB), binbaum(RTB). |