Арифметика

 

Арифметические утверждения присваивания имеют следующий

общий вид:

 

результат = операнд1 оператор операнд2

 

В качестве оператора возможно указать "+" (сложение), "-"

(вычитание), "*" (умножение), "/" (деление), div (целая часть

деления) и mod (остаток деления). Следующая таблица показывает

тип результата в зависимости от типов операндов и от оператора:

 

Операнд1 Операторы Операнда2 Результат
целое целое действительное действительное целое действительное целое   +, -, * +,-,* +,-,* +,-,*   / div,mod   целое действительное целое действительное целое, действительное целое   целое действительное действительное действительное   действительное целое  

 

К операторам сравнения относятся следующие:

 

= равно <> неравно

 

< меньше <= меньше или равно

 

> больше => больше или равно

 

Следующая таблица показывает приоритеты операторов, причем с

возрастанием номера приоритет уменьшается:

оператор () * / mod div + - сравнения
проиритет

 

Набор арифметических функции включает:

 

round(X) - округление;

abs(X) - модуль;

sin(X),cos(X),

tan(X),arctan(X) - тригонометрические функции;

eхр(Х) -е в степени X;

ln(X),lg(X) - натуральный и десятичный логарифмы;

sqrt(X) - корень.

 

Кроме этого имеются еще бинарные функции, которые работают, с

16-разрядными целыми числами (конкретизированность (i,i,о));

результатом будет соответственное целое число:

 

bitand(X,Y,Z) - логическое И;

bitor(X,Y,Z) - логическое ИЛИ;

bitxor(X,Y,Z) - исключающее ИЛИ;

bitleft(X,Y,Z) - сдвиг влево и

bitrlght(X,Y,Z) - сдвиг вправо, причем освобождающиеся биты

заполняются нулями.

 

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

random(X),

 

где Х конкретизируется числом в диапазоне [0,1].

Например, решение квадратного уравнения Ах**2 + Вх + С = 0:

 

predicates

urawnenije(real,real,real)

otwet(real,real,real)

clauses

urawnenije(А,В,С) :-

D=B*B-4*A*C,

otwet(A.B,D),nl.

otwet(_,_,D):-

D<0,

wrlte(" нет действительного решения "),!

otwet(A,B,D):-

D=0

X=-B/(2*A),

write('двa действительных совпадающих корня = ",Х),!,

otwet(A,B.D):-

W=sqrt(D),

X1»(-B+W)/(2*A),X2=(-B-W)/(2*А),

Write('Xl = ",Х1," ; Х2 = ",Х2).

goal

urawnenije(l,-15,50). /*'выводится: X1=10 ; Х2=5 */