Art*_*ium 5 prolog boolean-expression truthtable
我必须编写打印表达式真值表的程序.所以,我写了以下函数:
bool(true).
bool(fail).
tableBody(A,B,E) :-
bool(A),
bool(B) ,
write(A) ,
write(' '),
write(B),
write(' '),
write(E),nl, fail.
Run Code Online (Sandbox Code Playgroud)
我的问题是E(包含A和B的表达式)没有被评估,而是按原样打印.例如:
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.
Run Code Online (Sandbox Code Playgroud)
我有兴趣编写and(true, true)
(" and(X,Y)
"是我之前定义的仿函数)的评估值,而不是当前显示的值.我想过编写一个eval仿函数,但它不会产生同样的效果吗?我怎么解决这个问题?
我正在使用SWI-Prolog 5.8.谢谢.
这是一种方法:
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.
Run Code Online (Sandbox Code Playgroud)
生产:
?- tableBody(A,B,and(A,B)).
true true true
true false false
false true false
false false false
false.
Run Code Online (Sandbox Code Playgroud)