このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/120
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文:整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい。 
#  ただし、図形を表示するためのnの値は3以上とし、2以下の値が入力された場合は処理を終了する様にしなさい。 
#  [実行例] 
#  3      <-n入力 
#  n=3            
#  *** 
#   * 
#  *** 
#  4                   <-n入力 
#  n=4 
#  **** 
#    * 
#   * 
#  ****     
#  8                    <-n入力 
#  n=8 
#  ******** 
#        * 
#       * 
#      * 
#     * 
#    * 
#   * 
#  ********  
#  2 
#  

'整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい' :-
        get_integer(N),
        '整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい'(N).

'整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい'(N) :- N =< 2,!.
'整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい'(N) :-
        N >= 3,
        write_formatted('n=%t\n',[N]),
        'N個の星ならび'(N,L1),
        'N-2個の空白ならび(N,L2),
        横方向に星を表示(L1),
        右上から左下方向に星を表示(L2),
        横方向に星を表示(L1),
        get_integer(N2),
        '整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい'(N2).

'N個の星ならび'(N,L) :- length(L,N),all(L,'*').

'N-2個の空白ならび'(N,L) :- length(L1,N),L1 = [_,_|L],all(L,' ').

横方向に星を表示(L1) :-
        concat_atom(L1,S),
        write_formatted('%t\n',[S]).

右上から左下方向に星を表示([]) :- !.
右上から左下方向に星を表示([A|R]) :-
        concat_atom([A|R],S),
        write_formatted('%t*\n',[S]),
        右上から左下方向に星を表示(R).