2016-12-31 235 views
1

Given是一個List和兩個元素。首先,我需要檢查兩個元素是否是列表的一部分。之後,檢查元素Elem2
是否在給定列表中的Elem1之後。 我使用的謂詞是帶有3個參數的weiterHinten判斷一個元素是否在列表中的另一個元素之後

例如:檢查c是否在列表[a,c,b,a]中的b之後。

weiterHinten([H|T],H,B). 
weiterHinten([H|T],A,B):-weiterHinten(T,A,B). 

weiterHinten([a,c,b,a],b,c). 

這一目標,需要返回false.I知道,以後我找到列表的標題是等於A我需要檢查,如果B是表尾的成員。如果是,則表示B在列表中的A之後,但我不確定如何執行此操作。

我想:

weiterHinten([H|T],H,B):-member(B,T). 

但每當我打電話的目的它總是返回true對我來說不管是Elem2Elem1

+0

我不知道你的問題是什麼。如果你指定「它不是以這種方式工作」的意思,它可能會有所幫助;它在做什麼。無論如何,我試着回答,讓我知道它是否有幫助。 – user7610

+0

我的意思是,無論何時我打電話給目標,無論Elem2是否在列表中的Elem1之後,它總是返回true。例如,這個目標:? - weiterHinten([a,c,b,a],b,c)。回到我身邊,即使不是。 – UserMeli

回答

1

離開weiterHinten([H|T],H,B).排除。這是weiterHinten([H|T],H,B) :- true.的句法快捷方式,這是無稽之談。

這是爲我工作:

weiterHinten([H|T],H,B) :- member(B, T). 
weiterHinten([H|T],A,B) :- weiterHinten(T,A,B). 

的結果是

| ?- weiterHinten([a,c,b,a],b,c). 

no 
| ?- weiterHinten([a,b,c,a],b,c). 

true 
+0

這確實有效。非常感謝 ! – UserMeli

相關問題