判断一个元素是否在列表中的另一个元素之后
问题描述:
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对我来说不管是Elem2
后Elem1
答
离开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
我不知道你的问题是什么。如果你指定“它不是以这种方式工作”的意思,它可能会有所帮助;它在做什么。无论如何,我试着回答,让我知道它是否有帮助。 – user7610
我的意思是,无论何时我打电话给目标,无论Elem2是否在列表中的Elem1之后,它总是返回true。例如,这个目标:? - weiterHinten([a,c,b,a],b,c)。回到我身边,即使不是。 – UserMeli