このディレクトリの索引
#  
#  (p) http://cp1.nintendo.co.jp/2012 任天堂サイトの問題ですが 
#  
#  $ python SimpleBarsTest.py 
#  test_loop (__main__.testSimpleBars) ... ok 
#  test_simple_rule (__main__.testSimpleBars) ... ok 
#  
#  ---------------------------------------------------------------------- 
#  Ran 2 tests in 0.000s 
#  
#  OK 
#  
#  テストコードまでOKなんですが、 
#  answerを出したのですが違っているようなんです。 
#  この問題を解いた方がいましたら少し教えてもらえませんでしょうか。


'iTピラミッド' :-
        'iTピラミッド'(1,12,[i,'T']),
        'iTピラミッド'(12,1,['T',i]).
        'iTピラミッド'(1,6,[i,'T']).

'iTピラミッド'(_開始段数,_段数,_記号並び順) :-
        for(_開始段数,N,_段数),
        ピラミッドの段を生成(N,_記号並び順,L),
        最初の3文字分を末尾に移動して段文字列とする(L,_段文字列),
        writef('%t\n',[_段文字列]),
        N = _段数.

ピラミッドの段を生成(N,_記号並び順,L) :-
        段の記号部分を生成(_記号並び順,L2),
        length(L,25),
        append(L1,L2,L1,L),
        all(L1,' ').

段の記号部分を生成(_記号並び順,L2) :-
        _length is (N - 1) * 2 + 1,
        length(L2,_length),
        '記号並び順に変数を埋める'(_記号並び順,L2).

'記号並び順に変数を埋める'(_,[]).
'記号並び順に変数を埋める'([A|R1],[A|R2]) :-
        append(R1,[A],L1),
        '記号並び順に変数を埋める'(L1,R2).

最初の3文字分を末尾に移動して段文字列とする([_1,_2,_3|R],_段文字列) :-
        append(R,[_1,_2,_3],_求める記号ならび),
        atomic_list_concat(_求める記号ならび,_段文字列).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

all([],_).
all([V|R],V) :-
        all(R,V).

for(S,N,E) :-
        for_2(S,N,E).
for(S,N,E) :-
        for_1(S,N,E).

for_1(S,_,E) :-
        S < E,!,fail.
for_1(S,N,E) :-
        N is S.
for_1(S,N,E) :-
        S1 is S - 1,
        for_1(S1,N,E).

for_2(S,_,E) :-
        S > E,!,fail.
for_2(S,N,E) :-
        N is S.
for_2(S,N,E) :-
        S1 is S + 1,
        for_2(S1,N,E).