firstly look at following example:
?- fp(X,[b,a,b]).
false
Ok, because second argument must be two-elements sorted list. (In my program I assume that a<b
)
?-fp(X,[a,b,b]).
X = [a, b, b] ;
X = [b, a, b] ;
X = [b, b, a] ;
false.
Yeah, it is correct result.
However, for
?-fp ([b,a,b], X)
X = [a,b,b].
Yeah, it is expected result.
However, in case of
?-fp ([b,a,b], X)
X = [a,b,b];
Here is looping....
Is there exist way to deal with this looping ? I have thought a long time, but no success. Can you try to help me ?
fp(L, F) :-
fp(L, [], [], F).
fp([], AccA, AccB, F):-
append(AccA, AccB, F), !.
fp([a|L], AccA, AccB, F) :-
append([a|AccA], _, F),
fp(L, [a|AccA], AccB, F).
fp([b|L], AccA, AccB, F) :-
append(_, [b|AccB], F),
fp(L, AccA, [b|AccB], F).