このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/874
#  [1] 授業単元: Cプログラミング1 
#  [2] 問題文(含コード&リンク): キーボードより整数 a を入力して、 a×a の2次元配列を動的メモリ確保し、その配列の中に a×a の九九の計算結果を代入し、その内容を表示するプログラムを作成せよ。 
#  (入力例) 
#  input num : 3 
#  (出力) 
#  1 2 3 
#  2 4 6 
#  3 6 9 
#   
#  

'キーボードより整数 a を入力して、 a×a の2次元配列を動的メモリ確保し、その配列の中に a×a の九九の計算結果を代入し、その内容を表示する' :-
        'キーボードより整数 a を入力して'(_a),
        'a×a の2次元配列を動的メモリ確保し'(_a,LL),
        'その配列の中に a×a の九九の計算結果を代入し'(_a,LL),
        その内容を表示する(_a,LL).

'キーボードより整数 a を入力して'(_a) :-
        write('input num : '),
        get_line(Line),
        整数入力検査(Line,_a),!.
'キーボードより整数 a を入力して'(_a) :-
        'キーボードより整数 a を入力して'(_a).

整数入力検査(Line,_a) :-
        atom_to_term(Line,_a,_),
        integer(_a),
        _a > 0,!.
整数入力検査(Line,_a) :-
        writef('入力された %t からは適切な整数が得られませんでした。再入力をお願いします\n',[Line]),
        fail.

'a×a の2次元配列を動的メモリ確保し'(_a,LL) :-
        length(LL,_a),
        findall(L,(
                    append(_,[L|_],LL),
                    length(L,_a)),
                LL).

'その配列の中に a×a の九九の計算結果を代入し'(_a,LL) :-
        findall(L,(
                    append(L0,[L|_],LL),
                    findall(V,(
                                append(L01,[V|_],L),
                                ならびの掛け算([_|L0],[_|L01],LX),
                                length(LX,V)),
                            L)),
                LL).

ならびの掛け算(L1,L2,LX) :-
        findall(L2,(
                    append(_,[_|_],L1)),
                LL),
        flat(LL,LX).

その内容を表示する(_a,LL) :-
        表示パターンを生成する(_a,_表示パターン),
        append(_,[N|R],L),
        writef(_表示パターン,[N]),
        R = [].

その内容を表示する(_a,LL) :-
        表示パターンを生成する(_a,_表示パターン),
        append(_,[N|R],L),
        writef(_表示パターン,[N]),
        R = [].

表示パターンを生成する(_a,_表示パターン) :-
        length(L,_a),
        all(L,'%t '),
        append(L,['\n'],L2),
        concat_atom(L2,_表示パターン),!.