Следующая программа предназначена для решения простых задач на геометрические аналогии.
analogy(A is_to B,C is_to X,Answers):-
match(A,B,Rule),
match(C,X,Rule),
member(X,Answers).
match(inside(Figure1,Figure2),
inside(Figure2,Figure1),invert).
match(above(Figure1,Figure2),
above(Figure2,Figure1),invert).
% предложения и данные для тестирования
test_analogy(Name,X):-
figures(Name,A,B,C),
answers(Name,Answers),
analogy(A is_to B,C is_to X,Answers).
figures(test,inside(square,triangle),
inside(triangle,square),
inside(circle,square)).
answers(test,[inside(circle,triangle),
inside(square,circle),
inside(triangle,square)]).
Ее основным отношением является предикат analogy(Pair1,Pair2,Answers), в котором каждая пара Pair представляется термом X is_to Y. В программе, конечно, должно быть дано определение инфиксному оператору is_to. Элементы пары Pair1 находятся в таком же отношении, как и элементы пары Pair2, а во второй элемент пары Pair2 принадлежит множеству ответов Answers.
Праздник к вам приходит. Если вы хотите устроить свадебное торжество в стиле "Пиратская вечеринка", "Агент 007", "Свадьба в Малиновке" или "Любить по-русски", то по вопросам организации обращайтесь сюда: http://www.dolce-fiesta.ru/index.php/uslugi/dopuslugi/tamada.
Большое значение имеет выбор способа представления фигур в рас-сматриваемой задаче. Этот выбор оказывает существенное влияние на "ин-теллектуальность" программы. В программе фигуры представлены термами Пролога. Например, фигура A на рис. 1 - квадрат в треугольнике - представляется термом inside(square,triangle).
Связь между фигурами отыскивается с помощью предиката match(A,B,Rule). Это отношение истинно, если операция Rule сопоставляет A и B. Для решения рассматриваемой задачи применяется операция invert, которая обеспечивает обмен местами ее аргументов.
Предикат match в программе используется двояко. В первом случае с его помощью производится сопоставление двух данных фигур. Во втором случае для заданных операции и фигуры подбирается вторая фигура. Однако эти детали несущественны для недетерминированного поведения программы. Наконец, с помощью предиката member проверяется, принадлежит ли данная фигура множеству ответов. |