我正在尝试在 Prolog 的列表中进行搜索,但我想从某个位置开始。我必须做那个无聊的递归搜索吗?
谢谢你。
您可以使用 N 个 free_vars 跳过 N 个位置,并 append/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)
最好一次完成......