I have to write program that prints a truth table of expressions. So, I wrote the following function:
bool(true).
bool(fail).
tableBody(A,B,E) :-
bool(A),
bool(B) ,
write(A) ,
write(' '),
write(B),
write(' '),
write(E),nl, fail.
My problem is that E (wich is expression that contains A and B) is not evaluated, but printed as is. For example:
296 ?- table(A,B,and(A,B)).
A B expr(A,B)
true true and(true, true)
true fail and(true, fail)
fail true and(fail, true)
fail fail and(fail, fail)
false.
I am interested to write the evaluated value of and(true, true)
("and(X,Y)
" is a functor I defined earlier) instead of what is currently displayed.
I thought about writing an eval functor, but would not it have the same effect?
How can I solve this?
I am using SWI-Prolog 5.8. Thank you.
Here's one way to do it:
and(A, B) :- A, B.
evaluate(E, true) :- E, !.
evaluate(_, false).
bool(true).
bool(false).
tableBody(A,B,E) :-
bool(A),
bool(B),
write(A),
write(' \t '),
write(B),
write(' \t '),
evaluate(E, Result),
write(Result),nl, fail.
Produces:
?- tableBody(A,B,and(A,B)).
true true true
true false false
false true false
false false false
false.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With