% Aufgabe 1
isOne(1,Z):-!,Z=true. 
isOne(X,false).

oddList([],[]).
oddList([X|XS],[X|ZS]):- Y is X mod 2,\+ isOne(Y,false),!,oddList(XS,ZS).
oddList([X|XS],ZS):- oddList(XS,ZS). 

% Aufgabe 2
or(X,Y) :- X.
or(X,Y) :- Y.

orList([X|XS]):-or(X,orList(XS)). 

firstOf([X|XS],X,EXP):-EXP,!.
firstOf([Y|XS],X,EXP):-firstOf(XS,X,EXP).


% Aufgabe 3
:- op(990,fx,if).
:- op(980,xfx,then).
:- op(970,xfx,else).
:- op(960,xfx,:=).

if B then Z := Exp else Z := _ :- B, !, Z is Exp.
if _ then Z := _ else Z := Exp :- Z is Exp.