2016-12-31 138 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