このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/844
#  [1] 授業単元:C言語  
#  [2] 問題文(含コード&リンク):  
#  http://ime.nu/codepad.org/DXRUGC3J 
#  http://ime.nu/codepad.org/e9CIf3Iy 
#  
#  /*
#  
#  4.
#  2次元平面上の3つの座標 p1、p2、 p3 を頂点とする
#  3角形を考え、構造体 triangle を以下のように定義する。
#  struct triangle {
#  double p1[2]; double p2[2]; double p3[2];
#  };
#  
#  構造体 triangle に対して、以下の関数を作成せよ。 適当な構造体 triangle の変数を
#  いくつか作成して、この関数が正しく動作することを確認するプログラムを作成せよ。
#  
#  int congruence (structure triangle *a, structure triangle *b)
#  
#  三角形 a と三角形 b が合同かどうかを判定する、
#  合同なら 1 を合同でないなら 0 を返す
#  
#  */


'三角形 a と三角形 b が合同かどうかを判定する、合同なら 1 を合同でないなら 0 を返す'(_p1_a,_p2_a,_p3_a,_p1_b,_p2_b,_p3_b,1) :-
        三角形の三辺を得る(_p1_a,_p2_a,_p3_a,L1),
        三角形の三辺を得る(_p1_b,_p2_b,_p3_b,L2),
        'L1とL2の三辺がそれぞれ等しい'(L1,L2),!.
'三角形 a と三角形 b が合同かどうかを判定する、合同なら 1 を合同でないなら 0 を返す'(_,_,_,_,_,_,0).

三角形の三辺を得る((_x1,_y1),(_x2,_y2),(_x3,_y3),[_辺1,_辺2,_辺3]) :-
        _辺1 is sqrt((_x2 - _x1) * (_x2 - _x1) + (_y2 - _y1) * (_y2 - _y1)),
        _辺2 is sqrt((_x3 - _x2) * (_x3 - _x2) + (_y3 - _y2) * (_y3 - _y2)),
        _辺3 is sqrt((_x1 - _x3) * (_x1 - _x3) + (_y1 - _y3) * (_y1 - _y3)).

'L1とL2の三辺がそれぞれ等しい'([],[]).
'L1とL2の三辺がそれぞれ等しい'([A|R1],L2) :-
        select(A,L1,R1),
        select(A,L2,R2),
        'L1とL2の三辺がそれぞれ等しい'(R1,R2).