列表搜索Prolog

时间:2012-05-16 14:31:17

标签: list search recursion prolog

我正在尝试在Prolog的列表中进行搜索,但我想从某个位置开始。我是否必须进行那种无聊的递归搜索?

谢谢。

1 个答案:

答案 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)最好一次...