このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/277
#  [1] 授業単元: プログラム  
#  [2] 問題文(含コード&リンク):テキストからデータを読み込んでユークリッド距離を求めるプログラムをお願いします。また、データを増やす事と最大距離と最小距離を求めてください。三次元なので、n=3とします。 
#  

'テキストからデータを読み込んでユークリッド距離を求めるプログラムをお願いします。また、データを増やす事と最大距離と最小距離を求めてください。三次元なので、n=3とします。'(_二点と距離ならび,_最大距離,_最小距離) :-
        データの読み込み(L),
        組み合わせ位置番号ならびの生成(L,_位置番号ならび),
        findall([(x1,x2,x3),(y1,y2,y3),_距離],(
                    組み合わせ(_位置番号ならび,2,[Nth1,Nth2]),
                    list_nth(Nth1,L,[X1,X2,X3]),
                    list_nth(Nth2,L,[Y1,Y2,Y3]),
                    _距離 is sqrt((X1-Y1)^2 + (X2-Y2)^2 + (X3-Y3)^2))),
                _二点と距離ならび),
        最大値・最小値の取得(_二点と距離ならび,_最大値,_最小値).
        
データの読み込み(L) :-
        write('データ(x1,x2,x3を)カンマ区切りで入力してください。(終了は空行で) : '),
        get_line(Line),
        データの読み込み(Line,L).

データの読み込み('',[]) :- !.
データの読み込み(Line,[[X1,X2,X3]|R]) :-
        split(Line,[',',' '],[X1,X2,X3]),
        get_line(Line2),
        データの読み込み(Line2,R).

組み合わせ位置番号ならびの生成(L,_位置番号ならび) :-
        length(L,Length),
        findall(N,for(1,N,Length),_位置番号ならび).

最大値・最小値の取得(_二点と距離ならび,_最大値,_最小値) :-
        距離を分離(_二点と距離ならび,_距離ならび),
        max(_距離ならび,_最大距離),
        min(_距離ならび,_最小距離).

距離を分離([],[]) :- !.
距離を分離([[_,_,_距離]|R1],[_距離|R2]) :-
        距離を分離(R1,R2).