Программирование на языке Пролог для искусственного интеллекта | страница 14
>различны( X, Y)
достигается тогда и только тогда, когда X и Y не равны. Усовершенствованное правило для отношения >сестра
примет тогда следующий вид:
>сестра( X, Y) :-
> родитель( Z, X),
> родители( Z, Y),
> женщина( X),
> различны( X, Y).
Некоторые важные моменты этого раздела:
• Пролог-программы можно расширять, добавляя в них новые предложения.
• Прологовские предложения бывают трех типов: факты, правила и вопросы.
• Факты содержат утверждения, которые являются всегда, безусловно верными.
• Правила содержат утверждения, истинность которых зависит от некоторых условий.
• С помощью вопросов пользователь может спрашивать систему о том, какие утверждения являются истинными.
• Предложения Пролога состоят из головы и тела. Тело — это список целей, разделенных запятыми. Запятая понимается как конъюнкция.
• Факты — это предложения, имеющие пустое тело. Вопросы имеют только тело. Правила имеют голову и (непустое) тело.
• По ходу вычислений вместо переменной может быть подставлен другой объект. Мы говорим в этом случае, что переменная конкретизирована.
Предполагается, что на переменные действует квантор всеобщности, читаемый как "для всех…". Однако для переменных, появляющихся только в теле, возможны и другие формулировки. Например,
>имеетребенка( X) :- родитель( X, Y).
можно прочитать двумя способами:
(а) Для всех X и Y,
если X — отец Y, то
X имеет ребенка.
(б) Для всех X,
X имеет ребенка, если
существует некоторый Y, такой, что
X — родитель Y.
1.3. Оттранслируйте следующие утверждения в правила на Прологе:
(a) Всякий, кто имеет ребенка, — счастлив (введите одноаргументное отношение >счастлив
).
(b) Всякий X, имеющий ребенка, у которого есть сестра, имеет двух детей (введите новое отношение >иметьдвухдетей
).
1.4. Определите отношение >внук
, используя отношение >родитель
. Указание: оно будет похоже на отношение >родительродителя
(см. рис. 1.3).
1.5. Определите отношение >тетя( X, Y)
через отношение >родитель
и >сестра
. Для облегчения работы можно сначала изобразить отношение >тетя
в виде диаграммы по типу тех, что изображены на рис. 1.3.
1.3. Рекурсивное определение правил
Давайте добавим к нашей программе о родственных связях еще одно отношение — предок. Определим его через отношение >родитель
. Все отношение можно выразить с помощью двух правил. Первое правило будет определять непосредственных (ближайших) предков, а второе — отдаленных. Будем говорить, что некоторый является отдаленным предком некоторого Z, если между X и Z существует цепочка людей, связанных между собой отношением родитель-ребенок, как показано на рис.1.5. В нашем примере на рис. 1.1 Том — ближайший предок Лиз и отдаленный предок Пат.