このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/46
#  1] 授業単元: プログラミング2 
#  [2] 問題文(含コード&リンク):  
#  二次元平面上のある点はx座標とy座標とで表わされる。(x、yはそれぞれ実行値とする) 
#  また、点a(2.0,3.0)と点b(6.0,5.0)とを考える。このとき次の問題を解くプログラムを作成せよ。 
#  プログラムは全部まとめて1つのプログラムでよい。 
#  1.二次元平面の天を表わす構造体struct pointを定義せよ。 
#  2.点aと点bの中点を求めよ。 
#  3・点aから点bまでの距離を求めよ。 
#  4.点aと点bを結ぶ直線y=px+qのp,qを求めよ。 
#  

point((X,Y),X,Y) :- !.
point([X,Y],X,Y) :- !.

'点aと点bの中点を求めよ。'(_a,_b,_中点) :-
        point(_a,X1,Y1),
        point(_b,X2,Y2),
        _中点 = (X3,Y3),
        X3 is (X1 + X2) / 2,
        Y3 is (Y1 + Y2) / 2.

'点aから点bまでの距離を求めよ。'(_a,_b,_距離) :-
        point(_a,X1,Y1),
        point(_b,X2,Y2),
        _距離 is sqrt((X2-X1) ^ 2 + (Y2-Y1)^2).

'点aと点bを結ぶ直線y=px+qのp,qを求めよ。'(_a,_b,_p,_q) :-
        point(_a,X1,Y1),
        point(_b,X2,Y2),
        _p is (Y2-Y1) / (X2-X1),
        _q is Y1 - _p * X1.