Хелпикс

Главная

Контакты

Случайная статья





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



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

 

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

 

В процедурной семантике учитывается процесс поиска ПРОЛОГом решения, какие и где возможны возвраты, как можно избежать лишних повторений, или где поиск решения можно полностью остановить.

 

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

5.2.2.1 Пример не процедурной семантики.

Факты н_начальник(кто,кому)  задают
непосредственных начальников, а правила начальник(кто,кому)
описывают любых начальников над нижеследующими сотрудниками.

 


н_начальник(федя,нина).

н_начальник(вася,коля).

н_начальник(вася,федя).

 

начальник(X,Y):- н_начальник(X,Y). (1)
начальник(X,Y):- начальник(X,Z), н_начальник(Z,Y). (2)

 

?- начальник(X,Y).

X = федя,

Y = нина ;

X = вася,

Y = коля ;

X = вася,

Y = федя ;

X = вася,

Y = нина ;

 

Выполнение цели НЕвозможно, если правила (1) и (2) переставить местами:

 

начальник(X,Y):- начальник(X,Z), н_начальник(Z,Y).

начальник(X,Y):- н_начальник(X,Y).

 

?- начальник(X,Y).

 ERROR: Out of local stack

Exception: (416,927) начальник(_G283, _G377) ? abort

 Execution Aborted



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.