このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/535
#  [1] 授業単元:C++  
#  [2] 問題文(含コード&リンク): 
#      入力:二つの整数n,m 
#      出力:1からnまでの番号札を持った人が、番号順に円陣を組んでいる。 
#       最初に、1番札の人からm番目の人が退席する(円陣は1減) 
#       続いて、その次からm番目の人が退席する。これを繰り返したときの、 
#       退席者の順番を求め、出力せよ。 
#      -例:n = 9,m = 5のとき、退席者の順番は5,1,7,4,3,6,9,2,8 
#  

'1からnまでの番号札を持った人が、番号順に円陣を組んでいる。最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返したときの、退席者の順番を求め、出力せよ。'(_n,_m) :-
        findall(J,for(1,J,_n),L1),
        _m_1 is _m - 1,
        findall(_退席者,
                    '最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返す'(_m_1,L1,_退席者,L2),
                _退席者順ならび),
        concat_atom(_退席者順ならび,',',S),
        write_formatted('退席者の順番は%です\n',[S]).

'最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返す'(_m_1,L1,A,L2) :-
        ならびの回転(左方向,_m_1,L1,[A|L2]).
'最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返す'(_m_1,L1,A,L) :-
        ならびの回転(左方向,_m_1,L1,[_|L2]),
        '最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返す'(_m_1,L2,A,L).