% Aufgabe 1

%ersatz fuer =
eq(X,X).

% ersatz fuer =:=
equalWithEval(X,Y) :- X1 is X, Y1 is Y, X1 = Y1.

%ersatz fuer is
my_is(X,Y):-X = 1,Y =:= 1.
my_is(X,Y):-X = 2,Y =:= 2.
my_is(X,Y):-X = 3,Y =:= 3.

%ersatz fuer unify_with_occur_check gibt es nicht in Prolog ohne Meta-programmierung 


% Aufgabe 2
compare_(0,s(X),lt).
compare_(s(X),0,gt).
compare_(X,Y,eq):-unify_with_occur_check(X,Y).
compare_(s(X),s(Y),Z):-compare_(X,Y,Z).



%Aufgabe 3
:- op(500,xfx,[ist]).
% fuer Anfragen der Form 'Was ist A'

:- op(400,xfy,[und]). 
% fuer Terme der Form (A und (B und (C und D)))
:- op(300,xfy,[mal]).
% fuer Terme der Form (A mal (B mal (C mal D))) wobei 'mal' staerker bindet als 'und' und 'minus'

:- op(400,xfy,[minus]).
% fuer Terme der Form (A minus (B minus (C minus D)))

Z ist X und Y :- A ist X, B ist Y, Z is A+B.
Z ist X mal Y :- A ist X,B ist Y,Z is A*B.
Z ist X minus Y :- A ist X,B ist Y,Z is A-B.
Z ist X :- wandle(X,Z).

wandle(eins,1).
wandle(zwei,2).
wandle(drei,3).
wandle(vier,4).
wandle(fuenf,5).
wandle(X,X).

