このディレクトリの索引

http://hibari.2ch.net/test/read.cgi/tech/1308749241/340
#  [1] C言語演習 
#  [2] put_nchar関数(←自分で作成する)を使用して、以下のプログラムを作成せよ。 
#   何段ですか:5 
#    *       * 
#     *     * 
#      *   * 
#       * * 
#        * 
# 

'V字形を描く' :-
        段数を得る(_段),
        'V字形図案'(_段,_図案用紙),
        'V字形を描画する'(_図案用紙).

'V字形図案'(_段,_図案用紙) :-
        図案用紙の手配(_段,_図案用紙),
        'V字形図案に描く'([],_図案用紙).

'V字形図案に描く'(L0,[L]) :-
        append(L0,[*|L0],L),!.
'V字形図案に描く'(L0,[L|R]) :-
        append(L0,[*|L1],[*|L0],L),
        all(L1,' '),
        'V字形図案に描く'([' '|L0],R).

図案用紙の手配(_段,_図案用紙) :-
        _幅 is _段 * 2 - 1,
        length(L,_幅),
        length(_図案用紙,_段),
        findall(L,(
                    append(_,[_|_],_図案用紙)),
                _図案用紙).

'V字形を描画する'(_図案用紙) :-
        append(_,[L|R],_図案用紙),
        concat_atom(L,S),
        writef('%t\n',[S]),
        R = [].

段数を得る(_段) :-
        write('段数を入力してください : '),
        get_line(Line),
        段数入力診断(Line,_段),!.
段数を得る(_段) :-
        段数を得る(_段).

段数入力診断(Line,_段) :-
        atom_to_term(Line,_段,_),
        integer(_段),
        _段 > 0,
        1 is _段 mod 2,!.
段数入力診断(Line,_) :-
        writef('入力された %t からは段として適切な奇数が得られませんでした。\n',[Line]),
        fail.