:-use_module(library(clpr)).

toDL([],XS-XS). 
toDL([X|XS],[X|YS]-ZS) :- toDL(XS,YS-ZS).

exp(A,Z,R) :- sum(A,Z,R).
sum(A,Z,R) :- factor(A,B,E),add(B,C,F),sum(C,Z,G), R =..[F,E,G].
sum(A,Z,R) :- factor(A,B,E),minus(B,C,F),sum(C,Z,G),  R =..[F,E,G].
sum(A,Z,R) :- factor(A,Z,R).
factor(A,Z,R) :- value(A,B,E),mul(B,C,F),factor(C,Z,G),  R =..[F,E,G] .
factor(A,Z,R) :- value(A,B,E),div(B,C,F),factor(C,Z,G),  R =..[F,E,G].
factor(A,Z,R) :- value(A,Z,R).
value(A,Z,R) :- number(A,Z,R).
value(A,Z,R) :- bopen(A,B,E),exp(B,C,R),bclose(C,Z,F).
value(A,Z,R) :- function(A,B,E),bopen(B,C,F),exp(C,D,G),bclose(D,Z,H), R =..[E,G].
number([X|A],A,X):- integer(X).
bopen(['('|A],A,error).
bclose([')'|A],A,error).
add([+|A],A,+).
minus([-|A],A,-).
mul([*|A],A,*).
div([/|A],A,/).
function([abs|A],A,abs).

eval(EXP,Z) :- exp(EXP,[],X), Z is X.

verbrauch(S,L,T,V) :-  { S = G*T,  G80 = (G-80), F = (1+(G80*G80)*0.001), AL = L*F,  V*100 = S*AL},
write('Geschwindigkeit:'),write(G),nl,
write('Liter auf 100km: '),write(AL),nl,
write('Verbrauch:'),write(V),nl.