На этом шаге мы рассмотрим предикат writef.
Предикат writef позволяет выполнить форматированный вывод; он имеет следующий формат:
writef(FormatString, Arg1,Arg2,Arg3,...,ArgN) % (i,i,i,i, . ..,i)
Аргументы Arg1,...,ArgN должны быть константами или связанными переменными, принадлежащими стандартным доменам. Сложные домены форматировать нельзя. Строка форматирования содержит обычные символы и форматные спецификаторы; обычные символы печатаются без модификации, а форматные спецификаторы имеют следующую форму:
%-m.pf
Символы спецификаторов формата, следующие за знаком процента (%), являются необязательными и имеют значения, описанные в таблице 1.
Символ | Значение |
---|---|
Дефис |
Показывает, что поле выравнивается слева (по умолчанию выравнивается справа) |
m поле | Десятичное число, определяющее минимальную длину поля |
p поле | Десятичное число, описывающее либо точность представления с плавающей точкой, либо максимальное число символов, печатаемых в строке |
f поле | Описывает форматы, отличные от форматов, принятых по умолчанию для данного объекта. Например, поле f может описывать то, что целые числа должны быть напечатаны как беззнаковые или шестнадцатеричные числа |
Спецификатор формата | Описание |
---|---|
f | Вещественные в представлении с фиксированной точкой (типа 123.4 или 0.004321) |
e | Вещественные в экспоненциальном представлении (типа 1.234е2 или 4.321 е-3) |
g | Вещественные в формате f или е (формат по умолчанию) |
d | Целые, как знаковые десятичные числа |
u | Целые, как беззнаковые десятичные целые |
x | Целые, как шестнадцатеричные числа |
X | Целые, как шестнадцатеричные длинные числа |
c | Целые, как символы (char) |
s | Как строки (simbols и string) |
R | Как числа ссылки во внешних базах данных (только для домена ref) |
goal A=one, B=330.12, C=4.3333375, D="one two three", writef("A= '%-7' \nB='%8.1e'\n",A,B), writef("A='%' \nB='%8.4e'\n",A,B) ,nl, writef("С ='%-7.7g' \nD = '%7.7' \n",C,D), writef("C='%-7.0f' \nD =' %0 '\n",C, D), writef("char: %c,decimal: %d,hex: %x",'a','a','a','a').
После запуска эта программа создаст следующий вывод:
А ='one' В ='3.3Е+02' А ='one' В ='3.3012Е+021' С ='4.3333375' D ='one two' С ='4' D ='one two three' char: a,decimal: 97, hex: 61
database
person(string,integer,real)
predicates
run
clauses
person("Pete Ashton",20,11111.111).
person("Marc Spiers",32,33333.333).
person("Kim Clark",28,66666.666).
run:-
% Name is left-justified, at least 15 characters wide
% Age is right-justified, 2 characters wide
% Income is right-justified, 9 characters wide, with 2
% decimal places, printed in fixed-decimal notation
person(N, A, I),
writef("Name= %-15, Age= %2, Income= $%9.2f \n",N,A,I),
fail
;
true.
goal
run.
Результат программы будет следующим:
Name= Pete Ashton , Age= 20, Income= $ 11111.11 Name= Marc Spiers , Age= 32, Income= $ 33333.33 Name= Kim Clark , Age= 28, Income= $ 66666.67
На следующем шаге мы рассмотрим чтение.