- •Предложения в языке Пролог.
- •Термы Пролога.
- •Процедурная семантика и декларативный смысл.
- •Списки. Базовые операции над списками.
- •Операция сопоставления.
- •Перебор в Прологе. Механизм прямой трассировки и механизм возврата.
- •Отсечение в прологе, виды отсечений.
- •Арифметические действия в прологе.
- •Операторная запись.
- •Типовые предикаты Пролога.
- •Работа с базами данных.
- •Пролог и искусственный интелект.
- •Экспертные системы.
- •Двоичные деревья, двоичные справочники.
- •Решение логических задач, головоломок.
- •Представления графов в Прологе.
- •Как Пролог-система отвечает на вопросы пользователя.
- •Понятие строго функционального языка.
- •Определение функции. Безымянная лямбда функция.
- •Списки, операции над списками.
- •Внутреннее представление списков.
- •Символ, значение символа, свойства символа.
- •Рекурсия в Прологе, рекурсия по значению и аргументу.
- •Виды рекурсий в Лиспе.
- •Функции более высокого порядка. Применяющие и отображающие функционалы.
- •Замыкания.
- •Лисп в искусственном интеллекте.
Операторная запись.
Программист определяет новые операторы, вводя в программу особый вид предложений, которые иногда называют директивами. Такие предложения играют роль определений новых операторов. Определение оператора должно появиться в программе раньше, чем любое выражение, использующее этот оператор. Например, оператор родитель можно определить директивой
:- op( 600, xfx, родитель).
Такая запись сообщит Прологу, что мы хотим использовать " родитель " в качестве оператора с приоритетом 600 и типом 'xfx', обозначающий одну из разновидностей инфиксного оператора. Форма спецификатора 'xfx' указывает на то, что оператор, обозначенный через 'f', располагается между аргументами, обозначенными через 'х'.
Существуют три группы типов операторов, обозначаемые спецификаторами:
инфиксные операторы трех типов: xfx xfy yfx
префиксные операторы двух типов: fx fy
постфиксные операторы двух типов: хf yf
Спецификаторы выбраны с таким расчетом, чтобы нагляднее отразить структуру выражения, в котором 'f' соответствует оператору, а 'x' и 'y' представляют его аргументы.
Между 'x' и 'y' есть разница. Если аргумент заключен в скобки или не имеет структуры (является простым объектом), тогда его приоритет равен 0; если же он структурный, тогда его приоритет равен приоритету его главного функтора. С помощью 'x' обозначается аргумент, чей приоритет должен быть строго выше приоритета оператора (т e. его номер строго меньше номера приоритета оператора); с помощью 'y' обозначается аргумент, чей приоритет выше или равен приоритету оператора.
Типовые предикаты Пролога.
Типовые предикаты - позволяющие определить к какому типу относится объект.
var( X) - Эта цель успешна, если X в текущий момент — не конкретизированная переменная.
nonvar( X) - Эта цель успешна, если X — терм, отличный от переменной, или если X — уже конкретизированная переменная.
atom( X) - Эта цель истинна, если X обозначает атом.
integer( X)- Цель истинна, если X обозначает целое.
atomic( X) - Цель истинна, если X обозначает целое или атом.
Арифметические действия в прологе.
Отметим некоторые особенности стандарта языка при использовании арифметических действий.
для того, чтобы действительно вызвать какое-либо арифметическое действие, необходимо использовать оператор is.
Во-вторых, перед использованием переменных в арифметических действиях, они должны быть конкретизированы значениями.
В-третьих, лексический диапазон переменной – то предложение, в котором она присутствует. Если в программе присутствуют в разных предложениях переменные с одинаковыми именами, то это разные объекты.
Отметим ту особенность, что символ равенства (=) здесь не обозначает операцию присваивания, как в алгоритмических языках программирования. Это операция сопоставления объектов и в случае, если она завершается успехом, переменные конкретизируются соответствующими значениями.
Операции над числовыми величинами:
+ сложение
- вычитание
* умножение
/ вещественное деление
** степень числа (экспонента)
// целочисленное деление
mod деление по модулю
rem остаток от целочисленного деления
abs абсолютное значение числа
sign знак числа
random случайное число, не превышающее значения аргумента.
Для вещественных чисел в Strawberry Prolog определены следующие функции: sin, cos, tg, arcsin, arccos, arctg, sinh, cosh, tgh, sqrt, log, log10, exp. Их названия и функциональные действия совпадают с известными функциями алгоритмических языков программирования.
При работе с числовой информацией очень часто используются операции сравнения.
X > Y X больше Y
X < Y X меньше Y
X >= Y X больше или равен Y
X =< Y X меньше или равен Y
X =:=Y величины X и Y совпадают (равны)
X =\= Y величины X и Y не равны
Следует отметить разницу между операторами = и =:=, первая вызовет сопоставление объектов и если они сопоставимы, приведет к конкретизации. Никаких вычислений при этом производиться не будет. Вместе с тем, вторая операция (=:=) вызовет арифметические действия, а конкретизации переменных производиться, не будет.
