I want to simplify expressions like:
2+x+3 = 5+x
I managed to write this code:
simplify(K, K):-
atomic(K),!.
simplify(_ * 0, 0).
simplify(0 * _, 0).
simplify(0 + X, X).
simplify(0 + X, X).
simplify(X - 0, X).
simplify(X - 0, X).
simplify(0 / _, 0).
simplify(K + 0, E):-
simplify(K, E).
simplify(K - 0, E):-
simplify(K, E).
simplify(K1 + K2, R):-
simplify(K1, E1),
simplify(K2, E2),
simplify_addition(E1 + E2, R).
simplify(K1 - K2, R):-
simplify(K1, E1),
simplify(K2, E2),
simplify_substraction(E1 - E2, R).
simplify(K1 * K2, R):-
simplify(K1, E1),
simplify(K2, E2),
simplify_multiplication(E1 * E2, R).
simplify(K1 / K2, R):-
simplify(K1, E1),
simplify(K2, E2),
simplify_division(E1 / E2, R).
simplify_addition(K1 + K2, R):-
number(K1),
number(K2),
R is K1 + K2.
simplify_addition(K1 + K2, K1 + K2):-
atom(K1),
number(K2);
atom(K2),
number(K1).
simplify_substraction(K1 - K2, R):-
number(K1),
number(K2),
R is K1 - K2.
simplify_substraction(K1 - K2, K1 - K2):-
atom(K1),
number(K2);
atom(K2),
number(K1).
simplify_multiplication(K1 * K2, R):-
number(K1),
number(K2),
R is K1 * K2.
simplify_multiplication(K1 * K2, K1 * K2):-
atom(K1),
number(K2);
atom(K2),
number(K1).
simplify_division(K1 / K2, R):-
number(K1),
number(K2),
R is K1 / K2.
simplify_division(K1 / K2, K1 / K2):-
atom(K1),
number(K2);
atom(K2),
number(K1).
simplify_division(K / K, 1):-
number(K).
Now the problem that I ran into is that I don't know how to resolve stuff like x+3 for example because in the current state if I run the code simplify(2+x+3,R). for example it will get to a stage where K1 = 2+x and K2 = 3 and it will try to get the sum of this two in simplify_addition.