我有一個簡單的序言程序,試圖確定誰相信基於信任規則和知道規則的人。這是規則中的序言規則
know(joe,jack).
know(joe,sue).
know(joe,betty).
know(sue,betty).
know(jack,betty).
know(bill,betty).
knows(X,Y):- know(X,Y);know(Y,X).
trust(jack,joe).
trust(bill,joe).
trust(betty,jack).
的知道規則是對稱的和傳遞,以及信託規則由
Person X trusts Y if and only if
-X inherently trusts Y, or
-X knows two DIFFERENT people who trust Y.
信託定義不再是對稱的,而不是傳遞。
我不知道如何做規則內的規則,並且變量似乎在搞亂我,因爲在試圖只有2個變量作爲參數,但在規則中使用4。任何幫助將不勝感激,謝謝。
首先,只有一個小提示:爲了表示這兩個術語是*不同*,可以使用謂詞'dif/2'。有關更多信息,請參閱[tag:prolog-dif]。在規則體中只有一些變量出現在頭部是完全可以的。事實上,這是一個相當典型的例子。關鍵是要以聲明的方式思考它,即使用所需的任何附加變量來描述必須爲參數保留的約束。 – mat
@mat我創建了這個規則,但由於某種原因它導致了無限循環。信任(X,Y): - dif(A,B),知道(X,A),信任(A,Y),知道(X,B),信任(B,Y)。任何想法,爲什麼會這樣? – Johnny