% !!! 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).