我希望在子列表中搜索特定字符串。有一个字符串列表(可能是重复的);我有一些物品;我有一个索引指向当前所需的项目;我想从索引搜索到列表的末尾,并知道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)
,其中X
为blue
(等等,它会在整个计划中发生变化)。
非常感谢!
答案 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
开始的职位感兴趣。