- •1. Вступ в логічне програмування
- •1.1. Виникнення логічного програмування
- •1.2. Сучасний стан логічного програмування
- •Опис задачі на пролозі. Факти і правила
- •2.1. Опис задачі на пролозі
- •2.2. Факти
- •Цільове твердження
- •Умовні твердження
- •Приклад програми на пролозі
- •2.6. Виконання програми на пролозі
- •2.7. Статична та динамічна бази даних
- •2.8. Підготовка фактів для внутрішньої бази даних
- •2.9. Опис фактів внутрішньої бази даних
- •2.10. Предикати роботи з внутрішньою базою даних
- •2.11. Приклади використання внутрішньої бази даних
- •3. Основні поняття visual-prolog
- •3.1. Загальні відомості
- •3.3. Домени елементарних об’єктів
- •3.4. Терми
- •3.4.1. Константа
- •Анонімна змінна
- •3.4.3. Структури
- •3.5. Програма на пролозі
- •4. Механізми прологу
- •Механізм узгодження цілі з базою даних
- •4.2. Механізм звороту
- •4.3. Механізм звороту і відсік
- •4.4. Рекурсія
- •4.4.1. Рекурсивний метод розв’язку задач
- •Рекурсивні методи 2-х доменів:
- •Застосуємо висхідний метод рекурсії до розв’язку задачі:
- •Висхідна рекурсія
- •4.4.4. Предикат repeат
- •Міркування про те, як треба писати програму
- •5. Обробка рядків
- •5.1. Загальні відомості
- •1.1 Стандартні предикати обробки рядків
- •5.3. Лексиграфічне порівняння рядків
- •2Низхідна рекурсія
- •6.1. Метод низхідної рекурсії
- •6.2. Загальна характеристика рекурсивних методів
- •6.3. Низхідна та висхідна рекурсії
- •7. Робота зі списками
- •7.1. Списки. Оголошення списків
- •7.2. Увід-вивід списків
- •7.3. Основна операція на списках
- •7.4. Формування списків стандартним предикатом
- •Процедура з’єднує два списки.
- •Процедура розділяє список на два за вказаним елементом.
- •2.1 Сортування списків на пролозі
- •Сортування методом пухирця
- •7.8. Складені списки
- •8. Предикати вводу-вивіду
- •8.1. Предикати вводу
- •8.2. Предикати виводу
- •9. Файли
- •9.1. Символічне ім’я файлу
- •9.2. Вхідний і вихідний потоки
- •9.3. Організація файлу та методи доступу до файлу
- •9.4. Робота з файлами різними методами доступу
- •9.5. Закриття файлу
- •9.6. Предикати роботи з каталогами
- •9.7. Предикати, що працюють з атрибутами файлів
- •Література
9.5. Закриття файлу
Після закінчення роботи з файлом файл обов’язково треба закрити. Запис значень змінних на диск проводиться через буфер (область оперативної пам’яті). Файлова система слідкує за заповненням буфера і автоматично, непомітно для користувача записує заповнений буфер на диск. Часто залишок даних не заповнює буфер і тому залишок виводиться тільки при закритті файлу.
При закритті файлу виконуються наступні дії:
Виводиться залишок буфера з даними в файл на диск.
Корегуються відомості про кількість байтів у файлі в каталогу.
Очищується область з символічним ім'ям файлу і розривається зв’язок між символічним ім’ям файлу і файлом на диску.
Закриття файлу виконується предикатом
closefile (Символічне ім'я).
Приклад: closefile (f)
Предикат Flush (Символічне ім'я)
Дозволяє вручну вивести незаповнений буфер в файл на диск.
Приклад: flush(f)
Предикат очищує буфери системи.
9.6. Предикати роботи з каталогами
Предикати роботи з каталогами працюють з ім'ям файлу в операційній системі. Файли повинні бути закритими.
Предикат existfile (Ім'я файлу в ОС)
(і)
Перевіряє, чи існує файл на вказаному диску за вказаним шляхом. Предикат істинний, якщо файл знайдено. Предикат не знаходить каталоги. В рядку, що задає шлях „\” вказують двічі.
Приклад: existfile("d:\\program\\Prolog\\v\\h1.dat").
Предикат disk (Шлях)
Режими: (і) - робить диск та каталог поточними
(о) – повертає поточні диск і каталог
Приклад: disk(“d:\ \prolog”)
Предикат deletefile (Ім'я файлу в ОС)
Вилучити файл з вказаного диску за вказаним шляхом.
Приклад: deletefile(“a:G.dat”)
Предикат renamefile (Старе ім'я, Нове ім'я)
Перейменує файл на вказаному диску за вказаним шляхом. Предикат істинний, якщо новий файл не існує.
Приклад: renamefile (“g1.dat”,”g2.dat”)
Предикат searchfile (Список шляхів, Ім’я файлу, Змінна)
(і, і, o)
Предикат знаходить серед вказаного списку шляхів потрібне ім'я файлу і повертає ім’я разом зі шляхом. Список шляхів задають через „;”.
Приклад: do:-searchfile(“d:\\; c:\\”, “F.asc”, T), write(T).
Процедура do виводить ім’я файлу разом зі шляхом.
Предикат copyfile ( Ім’я файлу, Ім’я копії файлу)
(і,і)
Предикат копіює файл і надає копії вказане ім’я. Копія має такі атрибути як оригінал.
9.7. Предикати, що працюють з атрибутами файлів
Фізичні файли на диску можуть мати атрибути: архівний, схований, системний. Такі атрибути визначають дії системи відносно файлу. Крім того, атрибути файлу визначають дозволений доступ до файлу користувача(access modes): „тільки для читання”, „для читання і запису”, „тільки для запису”. Для файлів, що використовують декілька користувачів(sharing modes), існують атрибути, які вказують чи може інший процес відкрити цей файл з певним атрибутом.
Предикат openfile (Символічне ім’я, І’мя файлу в ОС,
Режими доступу і розподілу для файлу,
Фізичні атрибути файлу,
Дії при відсутності або наявності файлу.
(і, і, і, і, і)
Відкриває файл для утворення з вказівкою атрибутів.
Режими доступу і розподілу для файлу – формується з об’єднання по одному атрибуту з груп fm_access_XX i fm_ sh_XXXX і, необов’язково з атрибутів fm_returnerr, fm_writethru.
Для режиму доступу fm_access ХХ може бути:
Ro відкрити тільки для читання;
Wo відкрити тільки для запису;
Rw відкрити для читання і запису.
Для режиму розподілу fm_ sh XXXX може бути:
fm_sh_denyrw відмова читати/писати;
fm_sh_denywr відмова писати;
fm_sh_denyrd відмова читати;
fm_sh_denyno відмов нема.
Обробка помилок:
fm_returnerr повертати помилку
fm_writethru вивід на
Фізичні атрибути файлу:
fa_normal на читання і запис нема обмежень;
fa_rdonly тільки читати;
fa_hidden схований файл;
fa_system системний файл;
fa_subdir підкаталог;
fa_arch архівний файл.
Дії при наявності файлу з вказаним ім’ям (утворення прапорців):
cr_ex_fail якщо файл існує, генерирувати помилку OS;
cr_ex_open файл, що існує, відкритий;
cr_ex_replace якщо файл існує, замінити;
Дії при відсутності файлу з вказаним ім’ям(утворення прапорців:
cr_noex_fail генерує помилку, якщо файл не існує;
cr_noex_create утворити файл, якщо він не існує;