2013-03-20 92 views
1

我相信這是相當基本的,雖然我無法通過搜索找到它。Prolog互惠規則

我學習序言和發現規則的一個例子:(代表鄰接)

adj(1, 2). adj(2, 1). 
adj(1, 3). adj(3, 1). 
adj(3, 4). adj(4, 3). 

現在,這讓我覺得有點浪費,因爲我們知道鄰居是一個此消彼長的關係,應該是足以定義每一對中的一個,然後定義:

adj(X, Y) :- 
    adj(Y, X), !. 

我明白爲什麼這種簡單化的嘗試不起作用;如果X和Y不相鄰,它會陷入無限循環。但是,我還沒有弄清楚如何修改它以適用於所有情況。

回答

3

你應該引入一個替代名稱並使用它來編寫你的邏輯。例如

adj(1, 2). 
adj(1, 3). 
adj(3, 4). 

is_adj(X,Y) :- adj(X,Y) ; adj(Y,X).