Пример 11. База данных “путешествие” содержит факты, каждый из которых имеет по три аргумента

База данных “ путешествие ” содержит факты, каждый из которых имеет по три аргумента. Каждый факт устанавливает, что можно совершить путешествие из одного города (1-й аргумент) в другой город (2-й аргумент) воспользовавшись некоторым видом транспорта (3-й аргумент).

путешествие(белгород, орел, поезд).

путешествие(брянск, дятьково, автобус).

путешествие (губкин, белгород, автобус).

путешествие(орел, брянск, поезд).

Два правила “ можно_путешествовать ” устанавливают либо прямую, либо косвенную связь между двумя городами. Косвенное отношение будет соблюдаться в том случае, если возможно путешествие из одного города в другой через третий – промежуточный город.

можно_путешествовать(A,B):- путешествие (А, B,_).

можно_путешествовать(A,B):- путешествие(A, С,_),

путешествие (С, B,_).

Считается, что между этими двумя правилами неявно присутствует соединитель “ или ”. С декларативных позиций оба этих правила можно прочесть так: путешествие из города А в город B будет возможным, если

существует прямая транспортная связь между этими городами, либо можно совершить путешествие из города А в некоторый промежуточный пункт С, а затем добраться из города С в город В.

Процедурная трактовка данных правил будет иной:

Для того, чтобы найти способ добраться из города А в город B, необходимо либо найти прямую транспортную связь между городами, либо найти вид транспорта, связывающий город А и город C, а затем найти транспортную связь между городами С и B.

Пример 12.

Следующий запрос к базе данных можно_путешествовать:

Есть ли транспортная связь между городами Губкин и Орел?

?- можно_путешествовать(губкин, орел).

Yes

Ответ получен по второй фразе.

При обработке этого запроса интерпретатор вначале проверяет первую фразу. Если первая фраза дает отрицательный ответ, то интерпретатор переходит к проверке второй фразы.

Обработку последнего запроса можно представить в виде эквивалентной последовательности запросов:

?−можно_путешествовать(губкин, орел).

% первая подцель первого правила “можно_путешествовать”

?- путешествие (губкин, орел,_).

no

% первая подцель второго правила “можно_путешествовать”

?- путешествие (губкин, С,_).

С = белгород

% вторая подцель второго правила “можно_путешествовать”

?- путешествие (белгород, орел,_).

yes


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: