Программирование на языке Пролог для искусственного интеллекта - страница 19

стр.

(1) в программе существует предложение С, такое, что

(2) существует такая его (С) конкретизация I, что

  (a) голова I совпадает с G и

  (б) все цели в теле I истинны.

Это определение можно распространить на вопросы следующим образом. В общем случае вопрос к пролог-системе представляет собой список целей, разделенных запятыми. Список целей называется истинным (достижимым), если все цели в этом списке истинны (достижимы) при одинаковых конкретизациях переменных. Значения переменных получаются из наиболее общей конкретизации.

Таким образом, запятая между целями обозначает конъюнкцию целей: они все должны быть истинными. Однако в Прологе возможна и дизъюнкция целей: должна быть истинной, по крайней мере одна из целей. Дизъюнкция обозначается точкой с запятой. Например:

>P :- Q; R.

читается так: P — истинно, если истинно Q или истинно R. То есть смысл такого предложения тот же, что и смысл следующей пары предложений:

>P :- Q.

>P :- R.

Запятая связывает (цели) сильнее, чем точка с запятой. Таким образом, предложение

>P :- Q, R; S, T, U.

понимается как:

>P :- ( Q, R); (S, T, U).

и имеет тот же смысл, что и два предложения

>P :- Q, R.

>P :- S, T, U.

Упражнения

2.6. Рассмотрим следующую программу:

>f( 1, один).

>f( s(1), два).

>f( s(s(1)), три).

>f( s(s(s(X))), N) :-

> f(X, N).

Как пролог-система ответит на следующие вопросы? Там, где возможны несколько ответов, приведите по крайней мере два.

(a)> ?- f( s( 1), A).

(b)> ?- f( s(s(1)), два). 

(c)> ?- f( s(s(s(s(s(s(1)))))), С). 

(d)> ?- f( D, три).

2.7. В следующей программе говорится, что два человека являются родственниками, если

(a) один является предком другого, или

(b) у них есть общий предок, или

(c) у них есть общий потомок.

>родственники( X, Y) :-

> предок( X, Y).


>родственники( X, Y) :-

> предок( Y, X).


>родственники( X, Y) :-

> % X и Y имеют общего предка

> предок( Z, X),

> предок( Z, Y).


>родственники( X, Y) :-

> % X и Y имеют общего потомка

> предок( X, Z),

> предок( Y, Z).

Сможете ли вы сократить эту программу, используя запись с точками с запятой?

2.8. Перепишите следующую программу, не пользуясь точками с запятой.

>преобразовать( Число, Слово) :-

> Число = 1, Слово = один;

> Число = 2, Слово = два;

> Число = 3, Слово = три.

2.4. Процедурная семантика

Процедурная семантика определяет, как пролог-система отвечает на вопросы. Ответить на вопрос — это значит удовлетворить список целей. Этого можно добиться, приписав встречающимся переменным значения таким образом, чтобы цели логически следовали из программы. Можно сказать, что процедурная семантика Пролога — это процедура вычисления списка целей с учетом заданной программы. "Вычислить цели" это значит попытаться достичь их.

Назовем эту процедуру >вычислить. Как показано на рис. 2.9, входом и выходом этой процедуры являются:

 входом — программа и список целей,

 выходом — признак успех/неуспех и подстановка переменных.

Рис. 2.9. Входы и выходы процедуры вычисления списка целей.

Смысл двух составляющих выхода такой:

(1)  Признак успех/неуспех принимает значение "да", если цели достижимы, и "нет" — в противном случае. Будем говорить, что "да" сигнализирует об успешном завершении и "нет" — о неуспехе.

(2)  Подстановка переменных порождается только в случае успешного завершения; в случае неуспеха подстановка отсутствует.

ПРОГРАММА

>большой( медведь).     % Предложение 1

>большой( слон).        % Предложение 2

>маленький( кот).       % Предложение 3

>коричневый ( медведь). % Предложение 4

>черный ( кот).         % Предложение 5

>серый( слон).          % Предложение 6


>темный( Z) :-          % Предложение 7:

> черный( Z).           % любой черный

>                       % объект является темным

>темный( Z) :-          % Предложение 8:

> коричневый( Z).       % Любой коричневый

>                       % объект является темным

ВОПРОС

>?- темный( X), большой( X) % Кто одновременно темный

>                           % и большой?

ШАГИ  ВЫЧИСЛЕНИЯ

(1) Исходный список целевых утверждений:

>темный( X),  большой( X).

(2) Просмотр всей программы от начала к концу и поиск предложения, у которого голова сопоставима с первым целевым утверждением

>темный( X).

Найдена формула 7: