このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/449
#  [1] 授業単元:cプログラミング 
#  [2] 問題文(含コード&リンク):  
#  キーボードから数字(2〜9)を入力し、入力された数字を辺の長さとする正方形 
#  を表示する。なお、入力が間違っている場合、再度入力を要求する。 
#  ↓こんな感じ 
#  実行結果例 
#   
#  数字(2〜9)を入力してください:0 
#  入力エラーです!! 
#  数字(2〜9)を入力してください:3 
#   * * *  
#    
#   *   * 
#    
#   * * * 
#   
#  

'キーボードから数字(2〜9)を入力し、入力された数字を辺の長さとする正方形を表示する。なお、入力が間違っている場合、再度入力を要求する。' :-
        'キーボードから数字(2〜9)を入力し、'(N),
        正方形の格を変数のリストとして生成する(N,LL),
        第一行を星で詰める(LL),
        置換する(LL),
        各行を反転しながら、変数を空白に置換して行を表示する(LL).

正方形の格を変数のリストとして生成する(N,LL) :-
        星の間に空白を挿むからその分、格を拡張する(N,N2),
        findall(L,(
                      for(1,_,N2),
                      length(L,N2)),
                LL).

星の間に空白を挿むからその分、格を拡張する(N,N2) :-
        N2 is N * 2 - 1.

第一行を星で詰める([*]) :- !.
第一行を星で詰める([*,' '|R]) :-
        第一行を星で詰める(R).

置換する(L) :-
        置換(L,L).

各行を反転しながら、変数を空白に置換して行を表示する([]) :- !.
各行を反転しながら、変数を空白に置換して行を表示する([L|R]) :-
        reverse(L,L),
        変数を要素を空白に置換する(L),
        concat_atom(L,A),
        write_formatted('%t\n',[A]),
        各行を反転しながら、変数を空白に置換して行を表示する(R).

変数要素を空白に置換する([]) :- !.
変数要素を空白に置換する([' '|R]) :-
        変数要素を空白に置換する(A,R),!.
変数要素を空白に置換する([_|R]) :-
        変数要素を空白に置換する(R),!.

'キーボードから数字(2〜9)を入力し、'(N) :-
        write('2〜9の整数を入力してください : '),
        get_line(Line),
        'キーボードから数字(2〜9)を入力診断'(Line,N),!.
'キーボードから数字(2〜9)を入力し、'(N) :-
        'キーボードから数字(2〜9)を入力し、'(N).

'キーボードから数字(2〜9)を入力診断'(Line,N) :-
        atom_to_term(Line,N,_),
        integer(N),
        N >= 2,
        N =< 9,!.
'キーボードから数字(2〜9)を入力診断'(Line,N) :-
        write_formatted('入力された %t は2〜9の整数ではありませんでした\n',[Line]),
        write('再入力をお願いします。\n'),
        fail.