Программирование на языке Пролог для искусственного интеллекта | страница 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 Том — ближайший предок Лиз и отдаленный предок Пат.