Стандартные предикаты ввода-вывода в Турбо-Прологе
Служат для организации взаимодействия программы с пользователем.
write (l1, l2, … ) ((i)*)
Запись заданных констант или значений переменных l1, l2, … в активное окно на текстовом устройстве вывода. Аргументы могут быть как константами так и переменными, связанными со значениями стандартных типов данных.
write f (формат, a1, a2, …) (i, (i)*)
Осуществляется форматный вывод. Общий вид формата %-m.p,
где % - начальный символ, - – указывает выравнивание по левой границе, по умолчанию – по правой границе, m – минимальная ширина поля вывода (необязательно), p – точность выводимых чисел.
readln (строка) (string) : (o)
Читает строку с текстового устройства ввода и связывает ее с заданной переменной. Конец строки – ввод. Переменная может быть символьного типа.
readint (целочисленная переменная) (integer) : (o)
Читает целое число и связывает его с заданной переменной. Переменная не должна быть определена до вызова предиката.
readreal (вещественная переменная) (real) : (o)
readchar (символьная переменная) (char) : (o)
inkey (символ) (char) : (o)
Читает символ, в отличии от readchar выполнение программы не прерывается. Поэтому применяется для организации циклов ожидания. Предикат inkey не выполняется, если не введен ни один символ.
Отсечение в программах на Турбо-Прологе.
В процессе достижения цели Пролог-система осуществляет автоматический перебор вариантов, делая возврат при неуспехе какого-либо из них. Такой перебор – полезный программе механизм, так как он освобождает пользователя от необходимости производить этот перебор самому. С другой стороны ничем не ограниченный перебор может быть источником неэффективности программы. Поэтому требуется его ограничить или исключить вовсе. Для этого предусмотрено специальное целевое утверждение «!,», называемое отсечением. Отсечение реализуется следующим образом: после согласования ЦУ, стоящего перед отсечением, все предположения с тем же предикатом расположенные после отсечения не рассматриваются
Можно выделить три основных функции отсечения:
1. Для устранения бесполезного цикла ( вычисление суммы 1+2+…+N)
сумма (1, 1):-,!
сумма (N, K):- N1=N-1, сумма (N1, K1), K=K1+N.
Если граничное условие будет записано в виде сумма (1, 1). , то сопоставление головы правила с запросом будет происходить успешно и при n=0, то есть будет предпринята попытка доказать цель сумма (0, К), что в свою очередь приводит к цели сумма (-1, К) и т.д.
2. При программировании взаимоисключающих утверждений.
max (X, Y, Max)
max (X, Y, X):- X>=Y.
max (X, Y, Y).
Или
max (X, Y, X):- X>=Y,!
max (_, Y, Y).
3.При необходимости неудачного завершения цели.