Пролог має предикати вводу, що призначені для вводу даного певного типу, універсальний предикат вводу для будь-яких доменів даних, предикат вводу бінарних даних без перетворення доменів даних.
Якщо тип даного, що вводиться не вірний, то предикати вводу повертають fail. Цей факт можна використати для повторення вводу при помилці.
Предикат вводу рядка: readln(Рядок)
(string)
Увід рядку закінчується клавішею „Enter”. При читанні рядку з клавіатури зчитує не більше 255 символів. При читанні з інших пристроїв читає до 64кб.
При роботі предиката працює ЕХО - функція (відображення введених символів на екран).
Приклад. do : - readln (S).
Вводиться: “abc” або abc - рядок типу Symbol.
Предикат вводу цілого числа: readint (N)
(integer)
Увід цілого числа закінчується клавішею „Enter”.При введенні вилучаються пропуски, що стоять попереду числа. Число перетворюється із символьного виду в бінарний.
Приклад: do:- readint(N).
Вводиться: 2341.
Предикат вводу дійсного числа: readreal (R)
(real)
Предикат працює аналогічно предикату readint. Дійсне число може вводиться з фіксованою крапкою і в експоненціальному виді. Предикат контролює форму запису числа.
Предикат воду символу: readchar(C)
( char )
Предикат вводить один символ звичайний чи керуючий. При вводі не працює ЕХО – функція, тобто введений символ не відображується на екрані. Предикат можна використовувати для вводу SCAN – коду (номеру клавіші). У буфері клавіатури кожен символ зберігається в слові(2 байта). Якщо символ є в таблиці ASCII, то він заноситься в перший байт. Для символу, що не входить в таблицю ASCII, в перший байт слова заноситься 0, а в другий SCAN – код.
Для символу А код ASCII 65
SCAN код 72
Для символу
Приклад вводу SCAN коду „стрілки вправо”:
do: - readchar (K), K= 0, readchar (C).
Вводиться: 72.
При натисненні клавіші “Enter” предикат повертає fail.
Предикат file_str (“DOS ім'я файлу”, Рядок)
Режими роботи:
(і, o) – читає весь текстовий файл в один рядок. Розмір <= 64Кб.
(і, і) – рядок записується у файл із зазначеним ім'ям. Якщо файл із таким ім'ям існує, то відбувається перезапис файлу.
При вводі даних з файлу увід закінчується комбінацією клавіш Ctrl-Z(2610).
Приклади: file_str (“F.dat”, S) - читає файл в рядок, якщо S вільна.
file_str (“F.dat”, ”Пролог”) - пише рядок в файл.
Використання такого предиката не вимагає відкриття чи закриття файлу.
Предикат file_bin(Ім’я файлу в ОС, Змінна)
Режими:
1. (і, о) привласнює вміст файлу в бінарному виді змінній;
2. (і, і) записує бінарне дане в файл.
Працює аналогічно предикату file_str.
Приклад.
disk("d:\\ira\\program\\Prolog\\v"),H=$[32,'A',31],file_bin("hh2.dat",H)
Програма назначає поточний каталог предикатом disk. Предикат file_bin працює у другому режимі, утворює файл hh2.dat. з одного рядка “2A1”.
Предикат readterm (Тип, Змінна)
(i, o)
За допомогою даного предиката можна вводити дані будь-якого типу.
Приклади:
1) readterm (integer, N) ввести ціле число
2) readterm (real, N) ввести дійсне число
3) Domains
s = string
...
readterm (s, Str). ввести рядок
4) Domains
c = Char
...
readterm (c, Ch).
При вводі рядків та символу обов'язково задавати лапки “ ”, ' '.
Для введення дійсних чи цілих чисел Domains не використовують.
Розглянемо, як уводяться дані складної структури. Нехай треба об'єднати кілька понять, як властивості деякого об'єкту. Для цього вводиться тип t.
Domains
t = tea (String, String) /* Назва чаю, тип чаю */
Predicates
do (t)
Clauses
do (T) : - readterm (t, T).
Goal
do (T), write (T).
Структура вводиться у вигляді: tea (“Lipton”, “байховий ”) і виводиться на екран в тому ж вигляді.
Предикат readblock(Кількість байтів, Змінна)
(і, о)
(цілий тип, binary)
Вводить вказану кількість байтів в бінарному виді, тобто робить дамп файлу або частини файлу. Кількість байтів повинна бути <= кількості байтів у файлі, включаючи символи, що керують виводом. Якщо задати кількість байтів 0, то буде зчитано весь файл. Вказана кількість байтів, що перевищує довжину файлу викликає помилку. Результат подається у шістнадцятирічному виді списком кодів символів і привласнюється змінній.
Розглянемо приклад. Нехай файл hh1.dat містить такі дані: 123
domains
file=f
goal
disk("d:\\ira\\program\\Prolog\\v"), openread(f,"hh1.dat"),
readdevice(f), readblock(0,H), closefile(f).
Програма назначає поточний каталог предикатом disk. Відкриває файл для читання і назначає на файл вхідний потік. Предикат readblock зчитає весь файл, тому що кількість байтів 0.Результат буде привласнено змінній Н у вигляді бінарної константи: $[31,32,33,0D,0A,34], де включено також символи “ПС” і “ВК”.