このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/835
#  [1] 授業単元:プログラミング演習 1 
#  [2] 問題文(含コード&リンク) 
#  2重forループを使って変則九九表を表示します。結果は次のようになります。 
#  81  72  63  54  45  36  27  18  9 
#  72  64  56  48  40  32  24  16  8 
#  63  56  49  42  35  28  21  14  7 
#  54  48  42  36  30  24  18  12  6 
#  45  40  35  30  25  20  15  10  5 
#  36  32  28  24  20  16  12   8   4 
#  27  24  21  18  15  12    9   6   3 
#  18  16  14  12  10    8    6   4   2 
#    9    8    7    6    5    4    3   2   1 
#   
#  これと同じ結果になるように2重whileループ版と2重do-while版のプログラムを書いてください。 
#  #include <stdio.h> 
#  int main(void) 
#  { 
#        int  i,  j; 
#   
#        for (i=9; i>0;  i--) { 
#            for(j=9; j>0; j--) printf("%2d", i*j); 
#             puts(""); 
#         } 
#        return 0; 
#  } 
#  [3.1] OS: unix  
#  [3.2] コンパイラ名とバージョン: gcc  
#  [3.3] 言語: C  
#  [4] 期限:6月4日  
#  よろしくお願いします。 
# 
# 

逆順九九表 :-
        for(9,M,1),
        for(9,N,1),
        V is M * N,
        write_formatted('%2d ',[V]),
        N = 1,
        nl,
        M = 1.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

逆順九九表 :-
        append(_,L1,[_,_,_,_,_,_,_,_,_]),
        append(_,[A|B],[_,_,_,_,_,_,_,_,_]),
        all(L1,[A|B]),
        flat(L1,L),
        length(L,V),
        write_formatted('%2d ',[V]),
        B = [],
        nl,
        L1 = [_].

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

flat([],[]) :- !.
flat([A|R],L) :-
        list(A),
        !,
        flat(A,L1),
        flat(R,L2),
        append(L1,L2,L).
flat([A|R],[A|R1]) :-
        flat(R,R1).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

逆順九九表 :-
        逆順九九表(9).

逆順九九表(0) :- !.
逆順九九表(M) :-
        逆順九九表(M,9),
        nl,
        M1 is M - 1,
        逆順九九表(M_1).

逆順九九表(M,0) :- !.
逆順九九表(M,N) :-
        V is M * N,
        write_formatted('%2d ',[V]),
        N_1 is N - 1,
        逆順九九表(M,N_1).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

逆順九九表 :-
        逆順九九表([_,_,_,_,_,_,_,_,_]).

逆順九九表([]) :- !.
逆順九九表([_|L0]) :-
        逆順九九表([_|L0],[_,_,_,_,_,_,_,_,_]),
        nl,
        逆順九九表(L0).

逆順九九表(_,[]) :- !.
逆順九九表(L1,L2) :-
        all(L2,L1),
        flat(L2,L),
        length(L,V),
        write_formatted('%2d ',[V]),
        fail.
逆順九九表(L1,[_|R]) :-
        逆順九九表(L1,R).