このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/455
#  [1]授業単元 情報処理  
#  [2]問題文 大きさを入力して、半角文字*を使い、Xを描く。大きさは  
#  Xの縦と横の半角文字数である。  
#  [3]環境  
#  [3-1]os: windows7  
#  [3-2]コンパイラ名とバージョン:visualstdio2008  
#  [3-3]C言語  
#  [4]期限 2010/10/22  
#  [5]繰り返し文までしか習っていません。  
#  if文とfor文で書くこととのことです。おねがいいたします。さっぱりわかりません。 
# 

'大きさを入力して、半角文字*を使い、Xを描く。大きさはXの縦と横の半角文字数である。' :-
        '3以上の奇数を得る'(_大きさ),
        for(1,N,_大きさ),
        一行描く(N,_大きさ),
        N = _大きさ.

'3以上の奇数を得る'(_大きさ) :-
        write('大きさを3以上の奇数で入力してください : '),
        get_line(Line),
        診断(Line,_大きさ),!.
'3以上の奇数を得る'(_大きさ) :- '3以上の奇数を得る'(_大きさ).

診断(Line,_大きさ) :-
        atom_to_term(Line,_大きさ,_),
        integer(_大きさ),
        大きさ>=3,
        奇数(_大きさ),!.
診断(Line,_大きさ) :-
        write_formatted('入力された %t からは3以上の奇数は得られませんでした。再入力をお願いします。\n'),
        fail.

一行描く(N,_大きさ) :-
        一行分の枠を作る(_大きさ,L),
        M is _大きさ - N + 1,
        list_nth(N,L,'*'),
        list_nth(M,L,'*'),
        変数をスペースで埋める(L),
        concat_atom(L,S),
        write_formatted('%t\n',[S]),!.

一行分の枠を作る(_大きさ,L) :- length(L,_大きさ).

変数をスペースで埋める([]) :- !.
変数をスペースで埋める([V|R]) :-
        var(V),
        V = ' ',
        変数をスペースで埋める(R),!.
変数をスペースで埋める([A|R]) :-
        \+(var(V)),
        変数をスペースで埋める(R),!.