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



>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)  Подстановка переменных порождается только в случае успешного завершения; в случае неуспеха подстановка отсутствует.