2011-11-25 37 views
4

與邏輯函數子工作,我想有邏輯連接詞如在序言

not(X), conj(X, Y), some(Y, K).,我希望能夠在它們之間迭代。因此,例如我希望能夠不將(一些(Y,K))轉換爲全部(Y,而不是(K))。

我不希望他們有什麼特別的含義,我只是想用這種方式來處理邏輯公式。

這樣做的最好方法是什麼?

下面是我的代碼的實際行:

nnf(not(all(X, Y)) ,some(Z, W))  :- nnf(X, Z), nnf(not(Y), W). 

所以,如果我給它not(all(a,b))我想找回一些(一,不是(B)),但ATM我不知道怎麼弄Prolog以這種方式處理not/1all/2

回答

2

這裏沒有獨特的最佳方式。這取決於你的特殊用途。

您的問題實質上可以歸結爲:您的設置應該如何表示變量。由一個基礎術語?這是一個(Prolog)變量的自由表示。或者直接通過Prolog變量。

我寧願先嚐試地面表示。也許嘗試v(Nr) Nr一個整數。相對頻繁的是'$VAR'(Nr),它也被writeq/1認可。但是我會在開始時堅持使用v/1

+0

嘿,謝謝你的快速回復。但我不明白你的意思。我需要能夠做到這樣的事情,給一個函數做一些類似的事情(一些(a,b)),並返回所有的(a,not(b))。 – user1066113

+1

your_function(not(some(X,Y)),all(X,not(Y)))。對於這種特殊情況已經足夠了。你想推廣什麼? – m09

1

看看Thea project。它開發了一個用於處理OWL2本體的Prolog庫。也許他們已經實施了否定範式轉換。