2016-12-16 62 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)) 
相關問題