Арифметические утверждения присваивания имеют следующий
общий вид:
результат = операнд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 */