Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 谓词来检查一个元素是否位于列表中另一个元素的后面_Prolog - Fatal编程技术网

Prolog 谓词来检查一个元素是否位于列表中另一个元素的后面

Prolog 谓词来检查一个元素是否位于列表中另一个元素的后面,prolog,Prolog,给出了一个列表和两个元素。首先,我需要检查这两个元素是否是列表的一部分。然后,检查一个元素Elem2 在给定列表中的Elem1之后。 我使用的谓词是带有3个参数的weiterHinten 例如:检查列表[a,c,b,a]中c是否在b之后 weiterHinten([H|T],H,B). weiterHinten([H|T],A,B):-weiterHinten(T,A,B). weiterHinten([a,c,b,a],b,c). 这个目标需要返回false。我知道,在我发现列表的标题等于

给出了一个列表和两个元素。首先,我需要检查这两个元素是否是列表的一部分。然后,检查一个元素
Elem2

在给定列表中的
Elem1
之后。 我使用的谓词是带有3个参数的
weiterHinten

例如:检查列表[a,c,b,a]中c是否在b之后

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

weiterHinten([a,c,b,a],b,c).
这个目标需要返回false。我知道,在我发现列表的标题等于
A
之后,我需要检查
B
是否是列表尾部的成员。如果是,则表示列表中B在
A
之后,但我不确定如何执行此操作

我试过:

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

但每当我呼唤目标时,无论
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

我不知道你的问题是什么。如果你具体说明“它不是以这种方式工作”的实际含义,可能会有所帮助;它在做什么。不管怎样,我试着回答,让我知道这是否有帮助。我的意思是,无论Elem2在列表中是否在Elem1之后,每当我呼唤目标时,它对我来说总是返回真的。例如,这个目标:?-weiterHinten([a,c,b,a],b,c)。返回给我的是真实的,即使不是。