このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/927
#  [1] 授業単元: プログラミング  
#  [2] 問題文(含コード&リンク): 
#  n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求めるプログラムを 
#  配列を利用して作成しなさい. 
#  pを入力し、1,2,...,p-ノルムの値をすべてprintfで出力すること.  
#  p、n次元、ベクトルの成分は全てscanfで任意に読み込むようにすること。 
#  絶対値と巾乗を計算する関数 fabs(), pow()を使用してよい。 
#  ただし、未学習のポインタやライブラリ関数以外の関数は使用してはならない。 
#  

'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める。p、n次元、ベクトルの成分は全て任意に読み込む。1,2,...,p-ノルムの値をすべて出力する' :-
        'p、n次元、ベクトルの成分は全てscanfで任意に読み込む'(_T,_n次元,_n次元ベクトル),
        'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める'(_n次元ベクトル,_T,_p_ノルム),
        '1,2,...,p-ノルムの値をすべて出力する'(_n次元ベクトル,_n次元,_T,_p_ノルム).

'p、n次元、ベクトルの成分は全て任意に読み込む'(_T,_n次元,_n次元ベクトル) :-
        'pを読み込む'(_T),
        'n次元を読み込む'(_n次元),
        'n次元ベクトルを読み込む'(_n次元,_n次元ベクトル).

'pを読み込む'(_T) :-
        write('pを入力してください : '),
        get_line(Line),
        'pの読み込み診断'(Line,_T),!.
'pを読み込む'(_T) :-
        'pを読み込む'(_T).

'pの読み込み診断'(Line,_T) :-
        atom_to_term(Line,_T,_),
        integer(_T),!.
'pの読み込み診断'(Line,_T) :-
        writef('入力された %t はpの値としては適切ではありません。再入力をお願いします。\n',[Line]),
        fail.

'n次元を読み込む'(_n次元) :-
        write('n次元を入力してください : '),
        get_line(Line),
        'n次元の読み込み診断'(Line,_n次元),!.
'n次元を読み込む'(_n次元) :-
        'n次元を読み込む'(_n次元).

'n次元の読み込み診断'(Line,_n次元) :-
        atom_to_term(Line,_n次元,_),
        integer(_n次元),
        _n次元 > 0,!.
'n次元の読み込み診断'(Line,_n次元) :-
        writef('入力された %t から適切な次元数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'n次元ベクトルを読み込む'(_n次元,_n次元ベクトル) :-
        length(_n次元ベクトル,_n次元),
        findall([X],(
                    append(L0,[_|_],_n次元ベクトル),
                    length([_|L0],_n個目),
                    ベクトル値の入力(_n個目,X)),
                _n次元ベクトル).

'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める'(_n次元ベクトル,_T,_p_ノルム) :-
        'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める'(_n次元ベクトル,_T,0,_p_ノルム).

'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める'([],_T,S,_p_ノルム) :-
        _p_ノルム is S ^ (1 / _T).
'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める'([[X]|R],_T,S_1,_p_ノルム) :-
        S_2 is S_1 + abs(X) ^ _T,
        'n次元ベクトル(x_1, x_2,..., x_n)^Tのp-ノルムを求める'(R,_T,S_2,_p_ノルム).

'1,2,...,p-ノルムの値をすべて出力する'(_n次元ベクトル,_T,_p_ノルム) :-
        writef('%t次元ベクトル\n\n',[_n次元]),
        '1,2,...,の値をすべて出力する'(1,_n次元ベクトル,_n次元,_T,_p_ノルム),
        writef('\n%tのp_ノルムは %t です\n',[_T,_p_ノルム]).

'1,2,...,の値をすべて出力する'(_n次元ベクトル) :-
        append(L0,[[_値]|R],_n次元ベクトル),
        length([_|L0],N),
        writef('%t: %t\n',[N,_値]),
        R = [].