% Praedikate:
% vater(v,k) : v ist Vater von k
% grossvater(g,e) : g ist Grossvater von e

vater(fritz,thomas). % fritz ist vater von thomas
vater(thomas,maria).
vater(thomas,anna).
% ...

%grossvater(fritz,maria).
%grossvater(fritz,anna).
% G Grossvater von E, falls G ist Vater V und V ist Vater von E
grossvater(G,E) :- vater(G,V), vater(V,E).
%grossvater(G,E) :- vater(G,V), mutter(V,E).


% Listenkonkatenation: L1 ++ L2 == L3 (Haskell)
% append(L1,L2,L3) :<=> L3 ist die Konkatenation aller Elemente aus L1 und L2
% musterorientiert
app([]    ,Ys,Ys).
app([X|Xs],Ys,[X|Zs]) :- app(Xs,Ys,Zs).

% Letztes Element einer Liste:
last(Zs,E) :- app(_,[E],Zs).

% Element einer Liste?
elem(E,Zs) :- app(Xs,_,Zs), last(Xs,E).
