Операторы. Декларативный и процедурный смысл программы
Существуют 2 простых оператора.
1. write(«текст», А) – всегда работает, печатает текст, т.е. то, что находится в скобках;
2. writef(шаблон, список переменных) – форматированный вывод.
Допустим, необходимо написать программу, которая ищет синонимы слова. Введем предикат synonym(word, syn). Тогда программа будет иметь вид:
domains
word, syn=symbol
predicates
synonym (word, syn)
goal
synonym (brave, X), write (“Synonym for ‘brave’ is “), nl, write (“’”, X, ”’.”), nl.
сlauses
synonym(brave, daring).
synonym(brave, cowardless).
Внутренняя цель является составной и состоит из 5 подцелей. Synonym(brave, X) – найти утверждение, использующее предикат synonym, такое, что первый объект в нем bravo, и связать переменную Х с его вторым объектом. Второй подцелью является печать строки символов, третья подцель – встроенный предикат nl сдвигает курсор на начало новой строки. Список аргументов write может быть смешанный, как в четвертой подцели, которая печатает найденный синоним. В запросе может быть несколько переменных, например, synonym(P, Q). Ответ будет P=bravo, Q=daring и т.д.
Для реализации арифметических операций в Турбо Прологе имеются встроенные предикаты операций:
+, -, *./, mod, div (деление нацело, получение остатка),
определены все тригонометрические функции:
Cos(x), sin(x), tg(x), и ряд других функций.
Пример.
preducates
аdd(integer, integer) – сложение 2 целых чисел,
fadd(real, real) – сложение действительных числа.
Пример.
predicates
add(integer, integer)
fadd(real, real)
goal
write(“Result is”), nl, nl, add (44, 23), fadd (1.23, 3.56).
clauses
add(X, Y):– Z=X+Y, write(“Sum=”, Z), nl.
fadd(P, Q):– R=P+Q, write(“Fsum=”, R), nl.
Помимо принадлежности одному и тому же домену некоторые объекты могут иметь еще некоторое число общих атрибутов.
До сих пор мы рассматривали программу на Прологе, как систему вывода на клозах Хорна, т.е. как систему доказательств фактов на основе других фактов и правил. Действительно, в этом состоит так называемый декларативный (дескриптивный) смысл программы. В тоже время ряд предикатов, приведенных выше, более напоминают команды процедурного языка нежели логические выражения. Действительно, эти предикаты всегда истинны, но подразумевают определенные инструкции, которые компьютер должен выполнить. Таким образом, с учетом правил работы каждая программа на Прологе предполагает некоторую последовательность действий, т.е. алгоритм, который реализован в программе. В этом состоит процедурный смысл программы.