2016-12-25 17 views
-1

私は5ポイントの座標を持っています。これらを使って作成できるすべての三角形を表示するプログラムを作成したいと思います。例えば :ポイント付きの三角形 - プロローグ

  • P1(2,1)
  • P2(4,2)
  • P3(4,1)
  • P4(5,1)
  • P5( 6,3)

、出力は次のようなものでなければなりません。

  • P1、P2、P3
  • P3、P4、P5
  • ...
+0

[ツアー](http://stackoverflow.com/tour)をご覧ください。 –

+0

私は間違っていましたか? –

+0

@hessamsalehi *「何が間違っていたのですか?」*あなたはコードを投稿していないし、質問をしなかった。 –

答えて

0

ので、単純に、3点が三角形を作成していない唯一の方法は、次の場合です彼らは一直線に並んでいます。あなたの場合は、同じX値またはY値を共有することになります。だから3つのポイントをつかみ、それらのうちの少なくとも2つが互いに異なるかどうかを見てみましょう。その場合、それは三角形でなければなりません。

ファクトデータベースがひどく構造化されているため、問題が複雑になります。実際には、私はまったくそれを使用するつもりはない、私は自分自身がそれに触発作るつもりです:

point(p1, 2,1). 
point(p2, 4,2). 
point(p3, 4,1). 
point(p4, 5,1). 
point(p5, 6,3). 

今度は、述語を作ってみましょう:

triangle(P1, P2, P3) :- 
    point(P1, X1, Y1), point(P2, X2, Y2), point(P3, X3, Y3), 

    % first, make sure we have three different points 
    dif(P1, P2), dif(P2, P3), dif(P1, P3), 

    % now, ensure that all three of the Ys and all three of the Xs are not equal 
    \+ (X1 == X2, X2 == X3, X1 == X3), 
    \+ (Y1 == Y2, Y2 == Y3, Y1 == Y3). 

あなたはできるはずですこの述部を使用してすべての有効な点を出力します。実際には、注文制約を追加しない限り、いくつかの重複があります。しかし、これは正しい軌道に乗るはずです。