このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/281
#  [1] 情報処理演習  
#  [2] 問題:2重のfor文を使って,以下のような偶数の九九の表を作成せよ.ただし,行数と列数は入力して指定できるようにする.  
#  入力された行数と列数がそれぞれ0以下,20以上の場合は,九九は表示せずプログラムを終了する.  
#  また、ソースプログラムの説明,考察.for文についてのまとめなども加えよ。  
#  実行例 
#  ================================  
#  Input GYO: 3  
#  Input RETSU: 5  
#  2 4 6 8 10  
#  4 8 12 16 20  
#  6 12 18 24 30  
#  ================================  
#   
#  

'2重のfor文を使って,以下のような偶数の九九の表を作成せよ.ただし,行数と列数は入力して指定できるようにする.入力された行数と列数がそれぞれ0以下,20以上の場合は,九九は表示せずプログラムを終了する' :-
        行数と列数は入力して指定(_行数,_列数),
        偶数の九九の表を作成(_行数,_列数).

行数と列数は入力して指定(_行数,_列数) :-
        行数の入力(Line1,_行数),
        列数の入力(Line2,_列数),!.

行数の入力(_行数) :-
        write('行数 : '),
        get_line(Line),
        行数の入力診断(Line,_行数),!. 
行数の入力(_行数) :-
        行数の入力(_行数).

行数入力診断(Line_行数) :-
        atom_to_term(Line,_行数,_),
        integer(_行数),!.
行数入力診断(Line,_行数) :-
        writef('入力された%tから適切な行数を得られません。再入力をお願いします。\n',[Line]),
        fail.

列数の入力(_列数) :-
        write('列数 : '),
        get_line(Line),
        列数の入力診断(Line,_列数),!. 
列数の入力(_列数) :-
        列数の入力(_列数).

列数入力診断(Line_列数) :-
        atom_to_term(Line,_列数,_),
        integer(_列数),!.
列数入力診断(Line,_列数) :-
        writef('入力された%tから適切な列数を得られません。再入力をお願いします。\n',[Line]),
        fail.

偶数の九九の表を作成(_行数,_列数) :-
        '入力された行数と列数がそれぞれ0以下,20以上の場合は,九九は表示せずプログラムを終了する'(_行数,_列数),!.
偶数の九九の表を作成(_行数,_列数) :-
        '2重のfor文を使って,以下のような偶数の九九の表を作成'(_行数,_列数),
        行数と列数は入力して指定(_次の九九の表の行数,_次の九九の表の列数),
        偶数の九九の表を作成(_次の九九の表の行数,_次の九九の表の列数).

'入力された行数と列数がそれぞれ0以下,20以上の場合は,九九は表示せずプログラムを終了する'(_行数,_) :-
        _行数 =< 0,!.
'入力された行数と列数がそれぞれ0以下,20以上の場合は,九九は表示せずプログラムを終了する'(_,_列数) :-
        _列数 >= 20,!.

'2重のfor文を使って,以下のような偶数の九九の表を作成'(_行数,_列数) :-
        for(1,M,_行数),
        for(1,N,_列数),
        X is (2 * M) * N,
        writef('%4r',[X]),
        N = _列数,
        nl,
        M = _行数,!.