Так, по наивности, единственный способ три точки не создают треугольник, если они находятся в прямой линии. В вашем случае это будет, когда они будут иметь одни и те же значения X или Y. Итак, давайте возьмем три очка и посмотрим, по крайней мере, два из них отличаются друг от друга; если это так, это должен быть треугольник.
Вы усложняете вопросы, потому что ваша база данных фактов плохо структурирована. На самом деле, я не собираюсь использовать его на всех, я собираюсь сделать свой собственный вдохновился им:
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).
Вы должны быть в состоянии использовать этот предикат для вывода всех допустимых точек. На самом деле вы получите несколько дубликатов, если не добавить ограничение порядка. Но это должно привести вас к правильному пути.
Пройдите [тур] (http://stackoverflow.com/tour). –
что я сделал не так? –
@hessamsalehi * «Что я сделал не так?» * Вы не отправили ни одного кода и не просили ни слова. –