- •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. Предикати, що працюють з атрибутами файлів
- •Література
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
У формат рядку можна вказувати наступні типи:
d – ціле десяткове число зі знаком (char, integer)
u – ціле десяткове число без знака (char, integer)
D – довге десяткове число зі знаком (long)
U – ціле довге десяткове число без знака (long)
f – дійсні числа з фіксованою крапкою (real)
е – дійсні числа у виді exp (real)
g - дійсні числа в форматах f або e (real) формат по замовчанню
о – восьмеричне число(char, integer)
O – довге восьмеричне число(string)
X – довге шістнадцятирічне ціле(string)
x – шістнадцятирічне ціле(char, integer)
s - рядок (string, symbol)
с - символ (char, integer)
R – числа для посилань у зовнішніх базах даних(ref)
B – бінарне число (для типу binary)
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.