2016-12-16 69 views
0

我在序言中用运算符〜(not),v(or)和^(and)创建了一个程序。我怎样才能检查一个公式是否是一个号角条款?检查一个公式是否是一个号角语句

例如:

?- hclause((A^~B) v (~A^C)) 
true. 

提前感谢!

+1

可以在你的问题中,为你的Horn子句添加Backus-Naur形式?你想检查一个条款的公式或足够检查一个字符串中的公式(类似“hclause(”(A ^〜B)v(〜A^C)“)? – max66

+0

一个公式,它应该能够检查每个子句 – zer0kai

+0

对不起,但是......这并没有回答我的问题,你只需要检查'hclause(“(A ^〜B)v(〜A^C)”)的'hclause/',那里的公式是在一个字符串中?如果是这样,应该很简单(一种)。 – max66

回答

3

不知道理解,但...如果你定义^v二进制运营商和~为一元运算符,举例

:- op(400, fx, ~). 
:- op(500, xfy, ^). 
:- op(600, xfy, v). 

一个正确的公式的检查应该是自动的(给错误否则) 。

注意算符定义只是“语法糖”,例如,A^B^(A, B)的替代版本。

如果你想看到的(A^~B) v (~A^C)真正意义上的(这个定义为v^~),你可以使用write_canonical/1,所以用

write_canonical((A^~B) v (~A^C)), 

我获得

v(^(_4,~(_7)),^(~(_4),_15)) 
相关问题