このディレクトリの索引
#  
#  xxxx0xxxx 
#  xxx000xxx 
#  xx00000xx 
#  
#  こういうピラミッドを作るコードを教えてください 
#  言語は何でも良いですけどコードが長くなるのはNGです 
#  この例だと頂上の0は1個で、底辺は5個ですけど 
#  頂上n個、底辺k個、'0'と'x'の 文字は任意の文字を指定できるようなコードをおしえてください。
#  また層は2個ずつちがいますけど、この部分も任意の値を指定できるようにしてください 
#  
#  こういうのもあり 
#  xx0xx 
#  00000

ピラミッドを作る(_基壇の幅,_頂上の数,_底辺の数,_段ごとの増分,_ピラミッドの文字,_周囲の文字) :-
        _左右の捌きの文字数初期値 is (_基壇の幅 - _頂上の数) // 2,
        _段数 is (_底辺の数 - _頂上の数) // _段ごとの増分,
        ピラミッドを作る(_段数,_左右の捌きの文字数初期値,_段ごとの増分,_頂上の数,_ピラミッドの文字,_周囲の文字).

ピラミッドを作る(0,_,_,_,_,_) :- !.
ピラミッドを作る(_段数,_左右の捌き文字数,_段ごとの増分,_ピラミッドの段の文字数,_ピラミッドの文字,_周囲の文字) :-
        左右の捌き(_左右の捌き文字数,_段ごとの増分,_周囲の文字,_捌き文字列,_左右の捌き文字数_1),
        ピラミットの段(_ピラミッドの段の文字数,_段ごとの増分,_ピラミッドの文字,_捌き文字列,_ピラミッドの段の数_2),
        _段数_1 is _段数 - 1,
        ピラミッドを作る(_段数_1,_左右の捌き文字数_1,_段ごとの増分,_ピラミッドの段の数_2,_ピラミッドの文字,_周囲の文字).

左右の捌き(_左右の捌き文字数,_段ごとの増分,_周囲の文字,_捌き文字列,_左右の捌き文字数_1) :-
        n個の連続した文字列(_左右捌きの文字数,_周囲の文字,_左右捌きの文字列),
        _左右の捌き文字数_1 is _左右の捌き文字数 - _段ごとの増分 // 2.

ピラミットの段(_ピラミッドの段の文字数,_段ごとの増分,_ピラミッドの文字,_捌き文字列,_ピラミッドの段の数_2) :-
        n個の連続した文字列(_ピラミッドの段の文字数,_ピラミッドの文字,_ピラミッド段の文字列),
        writef('%t%t%t\n',[_捌き文字列,_ピラミット段の文字列,_捌き文字列]),
        _ピラミッドの段の文字数_2 is _ピラミッドの段の文字数 + _段ごとの増分.

n個の連続した文字列(_n個,_文字,_n個の連続した文字列) :-
        length(L,_n個),
        all(L,_文字),
        atom_chars(_n個の連続した文字列,L).

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