Page 82 - 4800
P. 82
ДОДАТОК А
СЛУЖБОВІ ПРЕДИКАТИ ПРОЛОГА ДЛЯ РОБОТИ З ФАЙЛАМИ
Вбудовані предикати звільняють програміста від необхідності самому визначати
деякі стандартні дії. Для кожного предиката зазначені типи даних і припустимі
сполучення їхніх типів:
i – параметр має визначене значення при звертанні до даного предиката;
o – параметр одержує значення при будь-якому звертанні до предиката;
io – тип може бути i або о незалежно від поточних типів інших параметрів
Наприклад, якщо предикат має два аргументи, то можливі такі шаблони – (і,і),
(o,o), (і,o), (o,і), або більш коротко – (io,io).
Пролог визначає поточний вхідний потік, з якого здійснюється читання усіх
вводимих даних, і поточний вихідний потік, у який здійснюється запис даних. Звичайно
з поточним вихідним потоком зв'язується дисплей, а з поточним вхідним потоком –
клавіатура.
Однак у ряді випадків використовуються операції читання або запису даних у
файли. Для того щоб одержати доступ до файлу, він повинний бути відкритий. Файл
може бути відкритий для читання, для запису, для додавання інформації або для
модифікації.
Коли файл відкритий, Пролог зв'язує символічне (Символ_ім’я_файлу) ім'я файлу
з дійсним ім'ям файлу (Ім’я_файлу), що використовується в операційній системі.
Символічне ім'я файлу повинне бути атомом і повинне бути описане в програмі в
розділі domains як стандартний тип file. У програмі тип file може зустрічатися в розділі
domains один раз.
openread(Символ_ім’я_файлу, Ім’я_файлу), (file, string) – (i,i). Відкриває файл для
читання.
openwrite(Символ_ім’я_файлу, Ім’я_файлу), (file, string) – (i,i). Відкриває файл для
запису. Якщо такий файл вже існував у каталозі, то вміст його знищується.
ореnаppend(Символ_ім’я_файлу, Ім’я_файлу), (file, string) – (i,i). Відкриває
дисковий файл для додавання інформації.
ореnmodify(Символ_ім’я_файлу, Ім’я_файлу), (file, string) – (i,i). Відкриває файл
для читання і запису.
readdevice(Символ_ім’я_файлу) (file) – (io). Переключає поточний вхідний потік
даних на файл із зазначеним ім'ям. Аргумент повинний бути зв'язаним і відкритий для
читання, інакше відбувається зв'язування Символ_ім’я_файлу з ім'ям активного
читаючого пристрою.
writedevice(Символ_ім’я_файлу) (file) – (io). Визначає поточний вхідний потік за
умови, що зазначений файл відкритий або для запису, або для додавання інформації.
closefile(Символ_ім’я_файлу) (file) – (i). Предикат closefile(...) закриває файл.
filepos(Символ_ім’я_файлу, Позиція, Режим) (file, real, integer) – (i,io,i). Змінити
місце читання або запису в зазначеному файлі (при умові, що файл відкритий для
читання і запису). Параметр Режим вказує позицію місця читання/запису відносно:
початку файлу (0), початкової позиції (1) чи кінця файлу (2).
eof(Символ_ім’я_файлу) (file) – (i). Перевіряє чи є поточна позиція в процесі
читання кінцем файлу.
existfile(Ім’я_файлу), (string) – (i). Перевіряє наявність файлу в поточному
каталозі. Використовується перед спробою відкрити файл.
deletefile(Ім’я_файлу), (string) – (i). Знищує файл з ім'ям Ім’я_файлу з дискового
каталогу.
renamefile(Старе_ім’я, Нове_ім’я), (string, string) – (i,i). Перейменовує файл, якщо
Нове_ім’я відсутнє в каталозі та обидва імені коректні.
disk(Шлях_до_каталогу) (string) – (io). Встановлює поточний пристрій і каталог.
Стандартні імена пристроїв для readdevice і writedevice наступні: printer, screen,
keyboard.
Для запису у файл необхідно змінити поточний вихідний потік даних так, щоб
ним був файл, у який будуть записуватися дані. Позиція у файлі, у якій матиме місце
читання або запис, може керуватися предикатом filepos.
82