
- •1. ИСПОЛЬЗОВАНИЕ ЯЗЫКА ПРОЛОГ
- •2. ЛОГИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ПРОЛОГ
- •2.1. Представление знаний и фактов
- •2.2. Исчисления логического типа
- •2.3. Исчисление резольвент
- •3. МЕХАНИЗМ РАБОТЫ ИНТЕРПРЕТАТОРА ПРОЛОГ-МАШИНЫ
- •Трассировка доказательства теоремы
- •4. ЯЗЫК ПРОЛОГ
- •4.1. Объявления
- •4.2. Данные и константы
- •Типы данных в Прологе
- •4.3. Управление возвратом
- •5. ВСТРОЕННЫЕ ПРЕДИКАТЫ И ФУНКЦИИ
- •5.1. Арифметические вычисления
- •5.2. Ввод и вывод
- •5.3. Текстовые окна и управление экраном
- •5.4. Обработка строк и преобразование типов
- •5.5. Базы данных
- •5.6. Вспомогательные средства
- •6. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА ПРОЛОГ

|
|
... , 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, ...