2012-05-16 266 views
0

我想在Prolog的列表中進行搜索,但是我想從某個位置開始。我需要做那無聊的遞歸搜索嗎?Prolog中的列表搜索

謝謝。

+2

列表在Prolog中是順序的。除非你有一箇中間名單職位的參考,否則除非通過連續斬首(AKA「無聊的遞歸搜索」),否則你不能訪問它。 – Amadan

+0

非常感謝! –

回答

0

你可以跳過使用N個free_vars N個位置,並追加/ 3擺脫名單」的頭信息:

?- [user]. 
|: find(Needle, Haystack, Skip) :- 
|:  length(Header, Skip), 
|:  append(Header, Actual, Haystack), 
|:  memberchk(Needle, Actual). 
|: % user://1 compiled 0,04 sec, 2 clauses 
true. 

?- find(3-X,[1-alfa,2-beta,3-gamma,4-delta,1-abba,2-bridge],1). 
X = gamma. 

?- find(3-X,[1-alfa,2-beta,3-gamma,4-delta,1-abba,2-bridge],3). 
false. 

?- find(3-X,[1-alfa,2-beta,3-gamma,4-delta,1-abba,2-bridge],2). 
X = gamma. 

如果有許多搜索到,該列表建立length(Header, Skip),最好做一次..