2012-04-21 7 views
2

私はプロローグプログラミングでは本当に新しいので、簡単な質問をすることができます。プロローグでリストをローテーションする方法は?

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

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

私は次のコードを試してみました:このような何かがトリックを行うべき

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

答えて

2

を:

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]. 
+0

返信いただきありがとうございます。 – Mahdi

+1

'rotatelist(L、[1,2])、false.'は終了しません。 magusの解を参照してください。 – false

0
 
rotatelist([H|T],R) :- append(T,[H],R1),rotatelist_2(R1,R). 
rotatelist_2(R,R). 
rotatelist_2(R1,R) :- rotatelist(R1,R). 
+2

'rotatelist([1,2]、L)、false.'は終了しません。 – false

7

recursiを使用する理由頭を尾の端に動かすだけのケースじゃない?

rotatelist([H|T], R) :- append(T, [H], R). 
+0

これは正解とマークされ、引数の順序に応じて右または左に回転するのに使用できます。 –

関連する問題