0

Prolog でリスト内を検索しようとしていますが、特定の位置から開始したいと考えています。退屈な再帰検索をしなければならないのでしょうか?

ありがとうございました。

4

1 に答える 1

0

you can Skip N positions using N free_vars, and append/3 to get rid of list' header:

?- [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.

If there are many search to to, the list build length(Header, Skip) it's better done once...

于 2012-05-16T21:15:39.200 に答える