Prolog - 从索引到结束的子列表中搜索项目

时间:2014-07-02 20:49:04

标签: prolog

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

我在这里找到的最相似的东西是Prolog: Create sublist, given two indices,但我不需要2个指数,我觉得它不应该那么复杂;这看起来也很接近,但我并没有真正理解它Create a sublist from a list given an index and a number of elements. Prolog。我也不认为sublist / 3会这样做(加上看起来它已基于此被弃用 - http://www.swi-prolog.org/pldoc/man?predicate=sublist/3

例如,列表[蓝色,橙色,红色,黄色,橙色],序列索引(2),“橙色”项目,我想知道橙色在子列表中[红色,黄色,橙色]。

所以,像这样的事情,只是这不是如何使用nth我猜:

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),其中Xblue(等等,它会在整个计划中发生变化)。

非常感谢!

1 个答案:

答案 0 :(得分:2)

你好像从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开始的职位感兴趣。