Целые числа
Целые числа могут быть положительные и отрицательные. Целое число всегда унифицируется с равным ему целым числом. Размер целых чисел ограничен только размером предоставляемого стека.
ЗАМЕЧАНИЕ. Данное утверждение верно для версий собранных с использованием библиотеки 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]
Пустая строка записывается “” (ей соответствует пустой список). Если необходимо использовать знак двойных кавычек внутри строки, то его удваивают (“”).
Строка унифицируется с идентичной ей строкой, но не унифицируется с одиночным символом, даже если она единичной длины. Строки и атомы никогда не унифицируются, даже если они содержат одинаковые символы.