Prolog 一阶逻辑 - 打印真值表
我必须编写打印表达式真值表的程序。 所以,我编写了以下函数:
bool(true).
bool(fail).
tableBody(A,B,E) :-
bool(A),
bool(B) ,
write(A) ,
write(' '),
write(B),
write(' '),
write(E),nl, fail.
我的问题是 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.
我有兴趣编写 and(true, true)
的评估值(“and(X,Y)
”是我之前定义的函子)而不是当前显示的内容。 我想过写一个eval函子,但它不是有同样的效果吗? 我该如何解决这个问题?
我正在使用 SWI-Prolog 5.8。 谢谢。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是一种方法
:
Here's one way to do it:
Produces:
和往常一样,这里单行
As usual, one-liner here