0

Prolog: に関数が必要ですswapcouple(L, L1)

swapcouple([a,b,c,d,e], M)--> 出力M=[b,a,d,c,e]

swapcouple([a,b,c,d], M)--> 出力M=[b,a,d,c]

4

2 に答える 2

1

実装は、これよりも直接的なものになることはほとんどありません。

list_swappedcouples([],[]).
list_swappedcouples([A],[A]).
list_swappedcouples([A,B|Xs],[B,A|Ys]) :-
   list_swappedcouples(Xs,Ys).

サンプルクエリは次のとおりです。

?- list_swappedcouples([a,b,c,d,e],Ls).
Ls = [b,a,d,c,e] ;                        % succeeds, but leaves behind choicepoint
false.

?- list_swappedcouples([a,b,c,d],Ls).
Ls = [b,a,d,c].                           % succeeds deterministically

編集 2015-06-03

最初の引数のインデックス付けを利用して、決定性を向上させることができます。

list_with_swapped_couples([],[]).
list_with_swapped_couples([X|Xs],Ys) :-
   list_prev_w_swapped_couples(Xs,X,Ys).

list_prev_w_swapped_couples([],X,[X]).
list_prev_w_swapped_couples([X1|Xs],X0,[X1,X0|Ys]) :-
   list_with_swapped_couples(Xs,Ys).

以下のすべてのサンプル クエリは、確定的に成功することに注意してください。

?- list_with_swapped_couples([],Xs).
Xs = [].

?- list_with_swapped_couples([1],Xs).
Xs = [1].

?- list_with_swapped_couples([1,2],Xs).
Xs = [2,1].

?- list_with_swapped_couples([1,2,3],Xs).
Xs = [2,1,3].

?- list_with_swapped_couples([1,2,3,4],Xs).
Xs = [2,1,4,3].

?- list_with_swapped_couples([1,2,3,4,5],Xs).
Xs = [2,1,4,3,5].
于 2015-04-30T17:38:11.263 に答える