Предикат nl
ПРЕДИКАТИ ВИВОДУ
В Пролозі існує такі предикати виводу: не форматований вивід даних, предикат переводу курсору для виводу нового рядку, форматований вивід даних, вивід бінарних даних без перетворення доменів даних.
Предикат write(Константи, Змінні) виконує неформатований вивід і має будь-яку кількість аргументів – константи і конкретизовані змінні.
Тип змінної або константи вказує, в якому форматі писати у файл або на пристрій.
Для елементарного форматування в предикаті write можна вказувати компоненти:
“\n” – розглядається як „ПС і ВК”.
\ код символу – розглядається як код символу.
Наприклад: “\065” розглядається, як код символу А.
“\t” – символ табуляції. Зміщує курсор на 8 позицій.
Наприклад, write (“\t”, “\065\066\067 ”, “\n”, “rkn”, “\010”, ‘2A’).
Вивід:_ _ _ _ _ _ _ АBC
r k n
2 A
Для друку одного символу „\” в рядку вказують два символи „\\”. Такий запис часто використовують при вказівки шляху до файлу.
Наприклад: “d:\\prolog\\F.dat”.
Предикат переводить курсор в новий рядок. Предикат nl означає new line. Предикат виводить керуючі символи „ПС”(переводить курсор в новий рядок ту ж позицію) і „ВК”(повертає курсор в початок рядку).
Наприклад: do:-write(“Перший рядок”),nl,write(“Другий рядок”).
Вивід: Перший рядок
Другий рядок
Форматований вивід
Предикат writef (Формат рядок, Константи, Змінні) – реалізує форматований вивід констант і конкретизованих змінних. Кількість аргументів предикату необмежена.
Для форматування предикат writef використовує при виводі формат-рядок, який задається користувачем. Формат рядок – це шаблон, символи якого, за винятком керуючих, виводяться на екран так, як і написані.
Розташування керуючих символів вказує, що в ці місця шаблону треба вставлять значення змінних чи констант. Керуючі символи починаються знаком %, потім записується тип, що вказує до якого виду потрібно перетворити значення змінної при виводі.
Керуючі символи записують у тому ж порядку, в якому записано відповідні змінні і константи.
Приклад: do:- N1 = 12, N2 = - 4, Sum= N1+N2,writef (“Сума чисел %d і
%d дорівнює %d”, N1, N2, Sum)
Тип d означає вивід десяткового числа зі знаком.
Вивід: Сума чисел +12 і - 4 дорівнює +8.
Типи формат рядку вказують до якого виду потрібно перетворити значення змінної при виводі. Типи, що записані в дужках вказують до яких доменів даних можна застосувати тип формат - рядку.
Наприклад: do:- C=’3’, writef(“Код символу %с - %u”, C, С).
Вивід: Код символу 3 - 51
У формат рядку можна вказувати наступні типи:
1) d – ціле десяткове число зі знаком (char, integer)
2) u – ціле десяткове число без знака (char, integer)
3) D – довге десяткове число зі знаком (long)
4) U – ціле довге десяткове число без знака (long)
5) f – дійсні числа з фіксованою крапкою (real)
6) е – дійсні числа у виді exp (real)
7) g - дійсні числа в форматах f або e (real) формат по замовчанню
8) о – восьмеричне число(char, integer)
9) O – довге восьмеричне число(string)
10) X – довге шістнадцятирічне ціле(string)
11) x – шістнадцятирічне ціле(char, integer)
12) s - рядок (string, symbol)
13) с - символ (char, integer)
14) R – числа для посилань у зовнішніх базах даних(ref)
15) B – бінарне число (для типу binary)
16) P - предикатне значення
Якщо тип формату для виводу не вказано, то Visual Prolog автоматично обирає тип виводу.
Дійсні типи можна записати в шаблоні в такому виді % +- m.n, де
m – ширина поля, n – кількість цифр після крапки,
+ число притиснуте до правого поля
- число притиснуте до лівого поля
Приклади:
Writef (“% + 5. 1”, 3.14)
_ _ 3 . 1
Writef(“% - 5.1”, 3.14)
3 . 1 _ _
Предикат format(Змінна, Формат рядок, Аргумент1, ..., АргументN)
(о, і, і, ... , і)
Працює аналогічно предикату writef , але результат не виводить на екран, а привласнює змінній.
Приклад: do:-K=25,format(D,"**%d**",K),write(D).
D = “**25**”
Вивід: **25**.
Предикат writeblock(Кількість байтів, Змінна)
(і, i)
(цілий тип, binary)
Записує вказану кількість байтів в бінарному виді вфайл. Якщо задати кількість байтів 0, то буде записано стільки байтів скільки є. Вказана кількість байтів, що перевищує довжину файлу викликає помилку. Значення змінної подається у шістнадцятирічному виді списком кодів символів або рядком.
Приклад. Утворити файл з бінарного терму.
Goal
disk("d:\\ira\\program\\Prolog\\v"),openwrite(f,"hh3.dat"), writedevice(f),H=$[50,51,10,13,52],writeblock(0,H),closefile(f).
Програма назначає поточний каталог предикатом disk. Відкриває файл для запису і назначає на файл вихідний потік. Предикат writeblock записує всі значення бінарного терму в файл, тому що кількість байтів 0. Результатом буде вміст текстового файлу: 23
4.