Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц по Visual Prolog.doc
Скачиваний:
4
Добавлен:
02.05.2019
Размер:
937.47 Кб
Скачать

8.2. Предикати виводу

В Пролозі існує такі предикати виводу: не форматований вивід даних, предикат переводу курсору для виводу нового рядку, форматований вивід даних, вивід бінарних даних без перетворення доменів даних.

Предикат 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

Предикат переводить курсор в новий рядок. Предикат 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.