ЦЕЛЫЕ ЧИСЛА

Целые числа могут быть положительные и отрицательные. Целое число всегда унифицируется с равным ему целым числом. Размер целых чисел ограничен только размером предоставляемого стека.

ЗАМЕЧАНИЕ. Данное утверждение верно для версий собранных с использованием библиотеки GMP(GNU multiple precision arithmetic library).

ASCII-коды символов также являются целыми числами.

РАЦИОНАЛЬНЫЕ ЧИСЛА

Рациональное число в SWI-prolog определено (в сборке с использованием GMP) аналогично рациональному числу в математическом смысле. Рациональное число представляется в виде пары двух целых чисел (деление на ноль запрещено) и обозначается функтором rdiv, который может выступать в роли функции двух аргументов (любые числа - не только целые), возвращающей рациональное число, либо в роли инфиксного оператора. При оперировании справа от оператора is только рациональными числами результат так же будет являться рациональным числом. Целое число является рациональным.

Для приведения числа с плавающей точкой к типу рационального числа используют функции rational(X) и rationalize(X), где X - число с плавающей точкой.rational(X) вычисляет рациональное число соответствующее машинному приближению числа X. rationalize(X) – «учитывает» ошибку округления и вычисляет рациональное число, соответствующее X (а не его машинному представлению).

ПРИМЕР.

?- X is rational(0.12).

X = 8646911284551353 rdiv 72057594037927936.

 

?- X is rationalize(0.12).

X = 3 rdiv 25.

 

Однако, можно убедиться, что для чисел, у которых машинное представление совпадает с самим числом, функции работают одинаково.

?- X is 1/256.

X = 0.00390625.

 

?- X is rational( 0.00390625).

X = 1 rdiv 256.

 

?- X is rationalize( 0.00390625).

X = 1 rdiv 256.

 

ПРИМЕРЫ использования рациональных чисел:

A is 2 rdiv 6 A = 1 rdiv 3

A is 4 rdiv 3 + 1 A = 7 rdiv 3

A is 4 rdiv 3 + 1.5 A = 2.83333

A is 4 rdiv 3 + rational(1.5) A = 17 rdiv 6

 

ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ

Числа с плавающей точкой представляются в виде С-типа double.

ПРИМЕРЫ чисел с плавающей точкой:

0.5 55.3 -83.0E21 2134.2 122.34e25

Число с плавающей точкой унифицируется с равным ему числом с плавающей точкой. Однако следует помнить, что операции над числами с плавающей точкой выполняются приближенно и попытка унификации двух чисел с плавающей точкой, которые кажутся идентичными, может окончиться неудачей.

СТРОКИ

Строки - это текстовые константы, которые представляются в виде последовательности ASCII-символов, заключенной между знаками двойных кавычек. С точки зрения внутреннего представления строка – список из ASCII-кодов символов, образующих строку.

ПРИМЕР

“He climbed and he climbed”

 

?- X="Hello". % пример унификации

X = [72, 101, 108, 108, 111]

Пустая строка записывается “” (ей соответствует пустой список). Если необходимо использовать знак двойных кавычек внутри строки, то его удваивают (“”).

Строка унифицируется с идентичной ей строкой, но не унифицируется с одиночным символом, даже если она единичной длины. Строки и атомы никогда не унифицируются, даже если они содержат одинаковые символы.