Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ОТС / promet.pdf
Скачиваний:
95
Добавлен:
23.02.2015
Размер:
683.47 Кб
Скачать

 

 

... , A,

B, C , ...

 

 

 

 

 

 

 

 

 

 

 

 

A :- . . .

 

 

B :- F , G , ! , H , ...

 

 

A :-

 

 

B :-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 1. Использование оператора отсечения

append([X|L11], L2, [X|L31]) :– append(L11, L2, L31).

4.3.Управление возвратом

Втех случаях, когда автору программы очевидно, что при неу­ даче доказательства литерала все остальные альтернативы будут также безуспешными, можно сократить затраты времени на пере­ бор. Для этого в языке имеется специальный предикат "!" (cut-эле­ мент). При его употреблении в предложении меняется механизм ра­ боты возвратов при неудачах. Если при возврате управление попа­ дает на предикат "!" , то считается, что неудачей заканчивается до­ казательство "плюс-литерала" предложения и перебираются аль­ тернативы предшествующего ему предиката "минус-хвоста" теоре­ мы. При движении в прямом направлении по предикатам "минус-ча­ сти" предложения предикат "!" всегда удачен или просто пропускает­ ся. Учитывая такое влияние на работу возвратов, предикат "!" назы­ вают отсечением [2]. Работа отсечения иллюстрируется диаграммой на рис. 1.

Отсечение часто используется для фиксации правильности вы­ бора предложения при доказательстве. Рассмотрим пример фраг­ мента программы, вычисляющей факториал:

factorial(1,1) :– !.

factorial(N,Res) :– N1 is N–1, factorial(N1,R1), Res is R1*N.

Пусть при доказательстве целевого утверждения сформировался "минус-хвост" вида:

... , M = 1, factorial(M, R), fail, ...

Соседние файлы в папке ОТС