3

私はプロローグ プログラミングの初心者で、簡単な質問をするだけです。

次のように、プロローグでリストを左に回転させたい:

rotatelist([1,2,3,4],R)   
R=[2,3,4,1]

次のコードを試しました:

rotatelist([],[]).   
rotatelist([H1|T1],[H2|T2]) :- rotatelist(H1,T2).
4

3 に答える 3

9

再帰を使用する理由..これは、頭を尾の最後に移動するだけの場合ではありませんか?

rotatelist([H|T], R) :- append(T, [H], R).
于 2012-04-21T15:01:24.713 に答える
1

このようなものは、トリックを行う必要があります:

rotatelist(List, R):- rotatelist(List, R1, H), R = [H|R1].
rotatelist([H], [], H).
rotatelist([H|T], L, R) :- rotatelist(T, T1, R), L = [H|T1]. 
于 2012-04-21T02:38:59.403 に答える
0
回転リスト ([H|T]、R) :- 追加 (T、[H]、R1)、回転リスト 2 (R1、R)。
回転リスト_2(R,R)。
回転リスト_2(R1、R) :- 回転リスト(R1、R)。
于 2012-04-21T12:03:43.437 に答える