- Философия, эзотерика:
- Религии:
- Познавательное
(обо всём)
/* GoogleAds */
Помимо принадлежности одному и тому же домену, некоторые объекты могут иметь еще некоторое число общих атрибутов. Например, определенные страны Европы имеют общие между собой границы, в то время как другие их не имеют. Предикатом для представления этого отношения служит
border(country,country)
Тот факт, что «Германия и Франция имеют общую границу», можно представить в виде утверждения
border(«France», «Germany»).
Франция с Германией имеют общую границу, так же как и Франция с Испанией, и Франция с Италией.
Шесть утверждений задают все возможные пары четырех выбранных европейских стран:
euro_pair(“France”,”Germany”). euro_pair(“France”,”Spain”). euro_pair(“France”,”Italy”). euro_pair(“Germany”,”Spain”). euro_pair(“Germany”,”Italy”). euro_pair(“Spain”,”Italy”).
Утверждения для стран с общей границей выглядят так:
border(“France”,”Germany”). border(“France”,”Spain”). border(«France»,«Italy»).
Используя отрицание можно определить, какие из стран не имеют общей границы.
Отрицание предиката border задается при помощи предиката not:
not(border(Country1,Country2)).
Этот предикат выдает все пары не граничащих друг с другом стран.
/* Программа: "Подбор стран, которые не имеют общих границ" */ domains country = symbol predicates euro_pair(country,country) /* пары стран */ border(country,country) /* пара стран с общей границей */ find_non_border_pair /* пара стран без общей границы */ clauses /* факты - пары для четырёх стран */ euro_pair("France","Germany"). euro_pair("France","Spain"). euro_pair("France","Italy"). euro_pair("Germany","Spain"). euro_pair("Germany","Italy"). euro_pair("Spain","Italy"). /* пара стран без общей границы */ border("France","Germany"). border("France","Spain"). border("France","Italy"). /* правило - пара стран не имеет общей границы, если существует вообще такая пара и этой пары не в списке пар с общей границей */ find_non_border_pair :- euro_pair(X,Y), not(border(X,Y)), write("No border ",X," with ",Y),nl. goal find_non_border_pair.
Результат:
No border Germany with Spain
No border Germany with Italy
No border Spain with Italy
При программировании на Прологе отрицания иногда бывают удобны для логического вывода неких фактов из уже имеющихся в базе данных. Использование предиката not в конструкции правила дает возможность ввести в программу элементы логики. Например, вопрос с отрицанием можно использовать для определения того, являются ли соседями две выбранные страны. Предположим, вы хотите знать, граничат ли между собой Германия и Испания. Запрос формулируется так:
find_non_border_pair :- euro_pair("Germany","Spain"), not (border("Germany", "Spain")), write("Germany and Spain without common border."),nl.
Ответом на запрос явится True, так как согласно имеющимся в базе данных фактам, эти страны общей границы не имеют.
Рассмотрим теперь другой запрос:
not (border(«France», «Italy»)).
Ответом на него будет False, так как Франция и Италия соседи.
!!Рекомендуем: Семейная Энциклопедия Здоровья ⇒ Что должен знать современный человек? ⇒ Самоанализ. Работа над собой ⇒ Оглавление ⇒ Главная сайта