このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/412
#  [1] 授業単元:アルゴリズム  
#  [2] 問題文(含コード&リンク):空欄を埋てください。 
#  問題はユーザーから入力された100個の点の座標について、最も近い二点間距離を表示するプログラムを作る。 
#   
#  #include<stdio.h> 
#  #include<math.h> 
#  #define NUM 100 
#  typedef struct { double x, y; } COODINATE; 
#  double dist(COODINATE, COODINATE); 
#  void main(void) 
#  { int i, j; 
#  COODINATE p[NUM]; 
#  double min; 
#  for (i = 0; i < NUM; i++) 
#  scanf("%lf %lf",&p[i].x, &p[i].y); 
#   
#  空欄 
#   
#  printf("Shotest distance = %lf\n", min); 
#  } 
#  double dist(COODINATE p0, COODINATE p1) 
#  {return(sqrt((p0.x - p1.x) * (p0.x - p1.x) + 
#  (p0.y - p1.y) * (p0.y - p1.y))); 
#  }  
#    
#   [3.1] OS: windows コンパイラ名とバージョン: bcc32  言語: C 
#  [4] 期限:今週中 
#   
#  お願いします。 
# 
# 

ユーザーから入力された100個の点の座標について、最も近い二点間距離を表示する :-
        '100個の点をランダムに生成する'([],_100個の点の座標ならび),
        ユーザーから入力された100個の点の座標について、最も近い二点間距離を表示する(_100個の点の座標ならび).

ユーザーから入力された100個の点の座標について、最も近い二点間距離を表示する(_100個の点の座標ならび) :-
        findall(N,for(1,N,100),L1),
        findmin(_距離,(
                    組み合わせ(L1,2,[Nth1,Nth2]),
                    list_nth(Nth1,_100個の点の座標ならび,[X1,Y1]),
                    list_nth(Nth2,_100個の点の座標ならび,[X2,Y2]),
                    _距離 is sqrt((X2-X1)^2+(Y2-Y1)^2)),
                _最も近い二点間距離),
        write_formatted('最も近い二点間距離は %t です\n',[_最も近い二点間距離]).

'100個の点をランダムに生成する'(L,L) :- length(L,100),!.
'100個の点をランダムに生成する'(L1,L) :-
        X is random mod 300,
        Y is random mod 300,
        \+(append(_,[[X,Y]|_],L1)),
        '100個の点をランダムに生成する'([[X,Y]|L1],L),!.
'100個の点をランダムに生成する'(L1,L) :-
        '100個の点をランダムに生成する'(L1,L).