Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_ЭкспСист / Лабораторная №6.doc
Скачиваний:
12
Добавлен:
09.02.2015
Размер:
69.63 Кб
Скачать

6.3. Форматирование

Метод format создаёт неплохие представления примитивных типов данных для вывода. К примеру, хорошо бы отображать цвета, используя шестнадцатеричные числа. В этом представлении, основные цвета становятся 0x00FF0000 (красный), 0x0000FF00 (зелёный), и 0x000000FF (синий).

Тем не менее, если вы попытаетесь вывести эти значения, используя stdio::write/n, вы получите их в десятеричном базисе. Используя string::format/n, как показано ниже, вы получите распечатку примитивных цветов в шестнадцатеричном виде.

% File primtype2.pro

implement primtype2

open core

constants

className = "primtype2".

classVersion = "".

clauses

classInfo(className, classVersion).

class predicates

color:(symbol, integer) procedure (i, o).

clauses

color("red", 0x00FF0000) :- !.

color("blue", 0x000000FF) :- !.

color("green", 0x0000FF00) :- !.

color(_, 0x0).

run():- console::init(),

color("red", C),

S= string::format("%x\n", C),

stdio::write(S), stdio::nl,

succeed().

end implement primtype2

goal

mainExe::run(primtype2::run).

Первый аргумент функции format определяет, какой вы ходите видеть распечатку. В примере аргумент “%x\n”: вы хотите шестнадцатеричное отображение числа, завершающееся возвратом каретки (\n). Аргументы, следующие за первым, показывают данные, которые вы хотите напечатать.

Вот несколько примеров форматирования:

S= string::format("Pi=%4.3f\n", 3.14159) S= “Pi=3.142\n”

S= string::format("%4.3e\n", 33578.3) S= ”3.358e+004\n”

S= string::format("Fac(%d)=%d", 5, 120) S= “Fac(5)=120”

S= string::format("%s(%d)=%d", "f", 5, 120) S= “f(5)=120”

Спецификацией поля форматирования является %[-][0][width] [.precision][type], где дефис (‐) означает, что поле будет выровнено по левому краю, выравнивание по правому краю принято по умолчанию; ноль перед width заполняет форматированную строку нулями до тех пор, пока не будет достигнута минимальная ширина; width определяет минимальный размер поля; precision определяет точность числа с плавающей точкой; наконец, type может быть f (число с фиксированной точкой), e (научная запись действительных чисел), d (десятичное целое), x (шестнадцатеричное целое), o (восьмеричное). Строки отображаются как “%s”. Вы можете добавить любое сообщение в спецификацию формата; вы также можете добавить возврат каретки (“\n”).

6.4. Домены

Вам могут потребоваться иные типы данных кроме примитивов, предложенных Visual Prolog. В этом случае, вам нужно определить новые типы данных, которые вы будете помещать в ваш код.

6.4.1. Списки

Вы узнали, что списки это упорядоченные последовательности элементов. Вы также знаете, как создавать списочные домены и объявлять предикаты на списках. Например, вот несколько списочных доменов:

domains

reals= real*. % Список действительных чисел

integers= integer*. % Список целых чисел

strings= string*. % Список строк

rr= reals*. % Список списков действительных чисел

Когда у вас есть объявление домена, вы можете использовать его как любой другой примитивный тип. В случае списков, объявление домена не обязательно, так как можно использовать типы вроде real*, string* или integer* прямо в объявлении предиката.

Соседние файлы в папке Лабы_ЭкспСист