Prolog-在子列表中从索引到结尾搜索项

Prolog-在子列表中从索引到结尾搜索项,prolog,Prolog,我希望在子列表中搜索特定字符串。有一个字符串列表(可能重复);我有一些东西;我有一个指向当前所需项目的索引;我想从索引搜索到列表的末尾,并知道该项是否仍在其中 我在这里发现的最相似的东西是at,但我不需要2个索引,我觉得它不应该那么复杂;这看起来也很接近,但我没有真正理解它。我也不认为sublist/3能做到这一点(而且它看起来像是基于这个-) 例如,一个列表[蓝色,橙色,红色,黄色,橙色],一个sequenceIndex(2),一个“Orange”项,我想知道Orange在子列表[红色,黄色,

我希望在子列表中搜索特定字符串。有一个字符串列表(可能重复);我有一些东西;我有一个指向当前所需项目的索引;我想从索引搜索到列表的末尾,并知道该项是否仍在其中

我在这里发现的最相似的东西是at,但我不需要2个索引,我觉得它不应该那么复杂;这看起来也很接近,但我没有真正理解它。我也不认为sublist/3能做到这一点(而且它看起来像是基于这个-)

例如,一个列表[蓝色,橙色,红色,黄色,橙色],一个sequenceIndex(2),一个“Orange”项,我想知道Orange在子列表[红色,黄色,橙色]中

所以,像这样的东西,只是我想这不是如何使用N:

sequenceIndex(0).

sequence([blue, orange, red, yellow, orange]).

stillThere(Color) :-
   sequenceIndex(Index),
   sequence(Listcolors),
   nth(Index, Listcolors, Color).
stillThere(Color) :-
   sequenceIndex(Index),
   N is Index+1,
   sequence(Listcolors),
   nth(N, Listcolors, Color).
我把它叫做have(X),stillThere(X),其中
X
blue
(等等,它会在整个程序中改变)


非常感谢

您似乎是从0开始的,因此您的定义是

list_index_item(Xs, I, Item) :-
   nth0(J, Xs, Item),
   J >= I.

?- list_index_item([blue, orange, red, yellow, orange], 2, orange).
true.

?- list_index_item([blue, orange, red, yellow, orange], 2,blue).
false.

这显示了一点Prolog谓词的通用性。目标
nth0(J,Xs,Item)
适用于所有可能的位置,但我们只对那些从
I
开始的位置感兴趣。

啊,太好了!!非常感谢你。