Стандартные предикаты
ТП имеет большой набор встроенных предикатов. Большинство стандартных предикатов выполняют несколько функций в зависимости от ссотояния параметров вхлдящих в предикат. К моменту обращения к предикату каждый отдельный его параметр может быть опредеелн или неопределен. Известные параметры предиката – входные (i), неизвестные – выходные (o). Совокупность входных и выходных параметров определяет работу предиката и называется поточным шаблоном. Не для каждого варианта все возможные варианты поточного шаблона имеют смысл.
Стандартные предикаты ввода-вывода
Служат для организации взаимодейтсвия программы с пользователем.
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 не выполняется, если не введен ни один символ.
/* Вычисление факториала */
domains
n, f=real
predicates
factorial (n, f)
result
clauses
factorial (1, 1).
factorial (N, F):-N=0, N1=N-1, factorial (N1, F1), F=F1*N.
result:-write ("Введите N”), nl, write ("N=”),
readreal (N), N=0, factorial (N, F), write (N,”!”,F), result.
goal
write ("Выход из программы при N<=0”), nl, nl, result