Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Функции и предикаты

В отличии от других версий Пролога, Турбо Пролог имеет полный набор

встроенных математических функций и предикатов, которые используют целые

и вещественные значения. Полный их список приведен в таблице 11.3

Таблица 11.3: Арифметические предикаты и функции

----------------------------------------------------------------

Функциональный предикат Описание

----------------------------------------------------------------

X mod Y Возвращает остаток от деления (модуль)

X деленного на Y.

X div Y Возвращает частное X деленного на Y

abs(X) Если значение X - положительная величина

val, abs(X) возвращает это значение; в

противном случае возвращает -1*val.

cos(X) Тригонометрические функции,требующие,

sin(X) чтобы X был величиной, представленной в

tan(X) радианах.

arctan(X) Возвращает значение вещественного X.

exp(X) Возводит e в степень X.

ln(X) Логарифм из X по основанию e.

log(X) Логарифм из X по основанию 10.

scrt(X) Корень квадратный из X.

random(X) Ставит в соответствие X случайное

вещественное число; 0 <= X < 1.

random(X,Y) Ставит в соответствие Y случайное

целое число; 0 <= Y < X.

round(X) Округляет значение X.

trunc(X) Усекает X (отбрасывает младшие разряды).

--------------------------------------------------------------

Генератор случайных чисел

Для генерации случайных чисел в Турбо Прологе предусмотрены два

стандартных предиката. Один из них возвращает случайное вещественное чис-

ло в диапазоне от 0 до 1, в то время как другой возвращает случайное це-

лое число в диапазоне от 0 до данного числа.

Предикат random/1

Эта версия random возвращает случайное вещественное число

RandomReal, которое удовлетворяет ограничению:

0 <= Random Real < 1.

random/1 имеет формат:

random(Random Real) /* (o) */

Предикат random/2

Эта версия random имеет два аргумента, формат:

random(MaxValue, RandomInt) /* (i,o) */

Этот предикат ставит в соответствие RandomInt случайное целое, удов-

летворяющее условию:

0 <= RandomInt < MaxValue

Предикат random/2 работает значительно быстрее чем random/1, так как

random/2 использует только целочисленную арифметику.

Пример

------

Программа CH11EX01.PRO использует random/1 для выбора трех имен из

пяти случайным образом.

predicates

person(integer,symbol)

rand_int_1_5(integer)

rand_person(integer)

goal

rand_person(3).

clauses

person(1,fred).

person(2,tom).

person(3,mary).

person(4,dick).

person(5,george).

rand_int_1_5(X):-

random(Y),X=Y*5 + 0.5.

rand_person(0) :-!.

rand_person(Count) :-

rand_int_1_5(N), person(N,Name), write(Name), nl,

NewCount = Count-1, rand_person(NewCount).

Соседние файлы в папке Документация