2012-11-28 83 views
0

我一直在研究此代碼以查找位置並告訴我該位置是否存在。該代碼是:序言列表位置

location(C, L). 
    location(C, [C,L]|_]). 
    location(C, [_|T]):- location(C,T,L). 

,我想如果C L。我在下面的代碼是類型出現在該位置的胸部這是真的:

location(b,[(a, 1), (b,2)]). 

答案應給予作爲一個是的,因爲它發現胸部位於該位置。這確實給我一個肯定的,但是當我的代碼更改爲:

location(e, [(a,1), (b,2)]). 

我仍然得到一個肯定的時,應當說明無。有誰知道我缺少什麼?

回答

0

你好,我會盡量回答你的問題,並指出你的錯誤。 你的第一行表示任何C是L.的元素。Prolog中的統一從頂部到底部,從左到右完成。所以Prolog將永遠統一該線,因此它總是會返回true。你的第二行和第三行包含語法錯誤。反正這裏是一個應該回答你的問題的代碼:

這裏

%,我們說,沒有胸部可以包含在一個空位置

location(_,[]) :- fail. 
如果我們以某種方式設法得到一個頭

%是含有C這就是真正的

location(C,[Head|_]) :- Head=(C,_). 
這裏

%,我們說如果C不等於東西(從頭部)嘗試尋找下在尾

location(C,[Head|Tail]):- Head=(Something,_),not(Something = C),location(C,Tail). 

也可以解決這個問題以下列方式

%基本上就要求有以L,使得胸部=(C,_)的成員胸部。

location1(C,L) :- member(Chest,L),Chest=(C,_). 
+0

這是非常有益的,謝謝! – user1854914