Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
05.03.2016
Размер:
1.28 Mб
Скачать

11.7 Зміст звіту

1. Обґрунтування вибору моделі представлення знань і її структура (вибір предметної області – згідно індивідуального завдання);

2. Програмна модель бази знань;

3. Узагальнений алгоритм роботи програми;

4. Текст програми;

Список використаних джерел

1. Глибовець М.М., Олецький О.В. Штучний інтелект. Підручник для студентів вищих навчальних закладів, які навчаються за спеціальностями "Комп'ютерні науки" та "Прикладна математика". - К.:Вид.дім "КМ Академія", 2002. - 366 с.

2. Бондарев В.Н., Аде Ф.Г. Искусственный интеллект. Учебное пособие для вузов. -Севастополь, Изд-во СевНТУ, 2002. -615 с.

3. Уинстон П. Искусственный интеллект. - М.:Мир, 1980. - 520 с.

4. Логический подход к искусственному интеллекту: от классической логики к логическому программированию. /Тейз А., Грибомон П., Луи Ж. и др. - М.:Мир, 1990. - 432 с.

5. Джексон П. Введение в экспертные системы. -М.:Изд.дом "Вильямс", 2001. - 624 с.

6. Гаврилова Т.А., Хорошевский В.Ф. Базы знаний интеллектуальных систем. - СПб:Питер, 2000. - 384 с.

7. Глибовець М.М., Кравченко І.В., Олецький О.В., Терещенко В.М. Програмування в Пролозі. Навчальний посібник. - К.: ВЦ "Київський університет", 1998. - 110 с.

8. Лорьер Ж.-Л. Системы искусственного интеллекта. - М.:Мир, 1991. - 568 с.

9. Адаменко А., Кучуков А. Логическое программирование и Visual Prolog. -СПб: БХВ-Петербург, 2003. - 992 с.

10. Марселлус Д. Программирование экспертных систем на Турбо-Прологе. - М.:Финансы и статистика, 1994. -256 с.

11. Братко И. Программирование на языке Пролог для систем искусственного интеллекта. - М.:Мир, 1990. - 560 с.

12. Представление и использование знаний. /Под ред. Х.Уэно, М.Исидзука. - М.:Мир, 1989. - 220 с.

13. Попов Э.В. Экспертные системы: Решение неформализованных задач в диалоге с ЭВМ. - М.:Наука, 1987. - 288 с.

14. Лорьер Ж.–Л. Системы искусственного интелекта.– М.: Мир, 1991.– 568 с.

15. Маллас Дж. Реляционный язык Пролог и его применение.– М.: Наука, 1990.– 464 с.

Додаток а Службові предикати Турбо-Пролога

Вбудовані предикати звільняють програміста від необхідності самому визначати деякі стандартні дії. Для кожного предиката зазначені типи даних і припустимі сполучення їхніх типів:

i – параметр має визначене значення при звертанні до даного предиката;

o – параметр одержує значення при будь-якому звертанні до предиката;

io – тип може бути i або о незалежно від поточних типів інших параметрів

Наприклад, якщо предикат має два аргументи, то можливі такі шаблони – (і,і), (o,o), (і,o), (o,і), або більш коротко – (io,io).

А.1 Стандартні предикати введення даних

Турбо-Пролог має стандартні предикати читання рядка символів; цілого, дійсного або символьного значення з клавіатури термінала: читання з файлу. Приведені нижче предикати не можуть безпосередньо використовуватися для читання складних об'єктів або списків.

readln(Рядкова_змінна), (string) – (о). Читає символи з поточного вхідного потоку, до коду "повернення каретки". Аргумент повинний бути незв'язаною змінною.

readіt(Ціла_змінна), (integer) – (о). Читає цифри з поточного вхідного потоку, до коду "повернення каретки". Аргумент повинний бути незв'язаною змінною.

readreal(Дійсна_змінна), (real) – (о). Читає дійсні символи з поточного вхідного потоку, до коду "повернення каретки''. Аргумент повинний бути незв'язаною змінною.

readchar(Символьна_змінна), (char) – (о). Предикат readchar(...) читає один символ з поточного вхідного потоку.

file_str(Ім’я_файлу, Рядкова_змінна), File <-> string, (string, string) – (i,io). Предикат file_str(...) читає символи (максимум 64 К) з файлу в рядок, поки не зустрінеться ASCII-код "кінець файлу".

А.2 Предикати перетворення даних

char_int (Символьний_параметр, Цілий_параметр) (char, integer) – (i,o) (o,i) (i,i). Предикат char_int(...) у випадках: (i,o) – зв'язує другий аргумент із десятковим АSСII-кодом першого аргументу: (o,i) – зв'язує перший аргумент із символом, що має ASCII-код другого аргументу; (і) – є успішним, якщо другий аргумент зв'язаний з ASCII-кодом першого.

str_int(Рядковий_параметр, Цілий_параметр) (string, integer) – (і,o) (o,і) (і,і) Предикат str_int(...) у випадках: (і,o) – зв'язує другий аргумент із двійковим еквівалентом десяткового цілого, з яким зв'язаний перший аргумент, (о,і) – зв'язує перший аргумент із рядком десяткових цифр, що представляють значення, з яким зв'язаний другий аргумент; (і,і) – є успішним, якщо другий аргумент зв'язаний із двійковим еквівалентом десяткового цілого, з яким зв'язаний перший аргумент.

str_char(Рядковий_параметр, Символьний_параметр) (string, char) – (і,o) (o,і) (і,і). Предикат str_char(...) у випадках: (і,o) – зв'язує другий аргумент із єдиним символом, що міститься в першому аргументі, що зв'язаний з цим символом; (о,і) – зв'язує перший аргумент із другим; (і,і) – буде щирим, якщо обидва аргументи зв'язані з тим самим символ.

str_real(Рядковий_параметр, Дісний_параметр) (string, real) – (і,o) (o,і) (і,і). Предикат str_real(...) у випадках: (і,о) – зв'язує другий аргумент із двійковим еквівалентом десяткового дійсного числа, з яким зв'язаний перший аргумент; (o,і) – зв'язує перший аргумент із рядком десяткових цифр, що представляють значення, з яким зв'язаний другий аргумент; (і,і) – є успішним, якщо другий аргумент зв'язаний із двійковим еквівалентом десяткового речовинного, з яким зв'язаний перший аргумент.

upper_lower(Рядок_верхн_рег, Рядок_нижн_рег) (string, string) – (і,і) (і,o) (o,і). Предикат upper_lower(...) у випадку: (i,o) – зв'язує другий аргумент зі значенням першого на нижньому регістрі; (о,i) – зв'язує перший аргумент зі значенням другого на верхньому регістрі; (i,i) – предикат успішно виконується, якщо аргументи зв'язані зі значенням однієї і того ж рядка, але перший – на верхньому регістрі, а другий - на нижньому.

А.3 Предикати роботи з вікнами

makewindow(Номер_вікна, Колір_екрана, Колір_рамки, Заголовок_рамки, Рядок, Стовпець, Висота, Ширина) (integer, integer, integer, string, integer, integer, integer, integer) (i,i,i,i,i,i,i,i). Визначає область екрана як вікно. Вікно ідентифікується по номеру. Параметр Колір_Рамки обмежує область вікна рамкою зазначеного кольору. Параметри Рядок і Стовпець визначають верхню позицію вікна, а Висота і Ширина – його розміри. Параметр Колір_екрану визначає колір вікна і символів.

shiflwindow(Номер_вікна) (integer) – (io). Встановлює або повертає номер поточного вікна.

removewindow – видаляє поточне вікно з екрана.

clearwindow – видаляє текст із поточного вікна.

windowstr(Екранний_рядок) (siring) – (io). У випадку (i) – зв'язує аргумент із рядком, виведеним в поточному вікні. Екранний_рядок має ту ж кількість ліній (рядків), скільки їх у вікні. Довжина кожного рядка визначається останнім символом, відмінним від пробілу. У випадку (о) – аргумент виводиться у вікно. Якщо в аргументі більше рядків, ніж у вікні, то виводяться тільки ті, котрі містяться у вікні. Якщо в рядку аргументу символів більше, ніж у вікні, то вони усікаються.

windowattr(Атрибут) (integer) – (i). Встановлює значення атрибута для поточного вікна.

А.4 Предикати роботи з файлами

Турбо-Пролог визначає поточний вхідний потік, з якого здійснюється читання усіх вводимих даних, і поточний вихідний потік, у який здійснюється запис даних. Звичайно з поточним вихідним потоком зв'язується дисплей, а з поточним вхідним потоком – клавіатура.

Однак у ряді випадків використовуються операції читання або запису даних у файли. Для того щоб одержати доступ до файлу, він повинний бути відкритий. Файл може бути відкритий для читання, для запису, для додавання інформації або для модифікації.

Коли файл відкритий, Турбо-Пролог зв'язує символічне (Символ_ім’я_файлу) ім'я файлу з дійсним ім'ям файлу (Ім’я_файлу), що використовується в операційній системі. Символічне ім'я файлу повинне бути атомом і повинне бути описане в програмі в розділі 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.

А.5 Предикати керування екраном

scr_char(Рядок, Стовпець, Символ) (integer, integer, integer) – (i,i,io). Виводить символ на екран з поточним атрибутом у позицію, зазначену номером рядка і стовпця. У випадку (о) – повертає значення символу.

scr_attr(Рядок, Стовпець, Атрибут) (integer, integer, integer) – (i,i,io). Встановлює або повертає атрибут символу на екрані в позиції, зазначеною Рядком і Стовпцем. Атрибут позитивне ціле число, що визначає колір і мерехтіння символу.

field_str(Рядок, Стовпець, Довжина, Рядкова_змінна) (integer, integer, integer, string) – (i,i,i,io). Якщо Рядок і Стовпець указують на позицію усередині поточного вікна, і поле даної довжини, що починається з цієї позиції, може бути поміщене в це вікно, то значення, з яким зчеплений аргумент Рядкова_змінна, буде занесено в цю позицію, причому буде записано стільки символів, скільки зазначено аргументом Довжина. У випадку (о) предикат повертає значення поля.

field_attr(Рядок, Стовпець, Довжина , Атрибут), (integer, integer, integer, integer) – (i,i,i,i). Якщо Рядок і Стовпець указують на позицію усередині поточного вікна, і поле даної Довжини, що починається з цієї позиції, може бути поміщене в це вікні, то всі позиції цього поля будуть мати вказаний Атрибут

cursor(Рядок, Стовпець), (integer, integer) – (i,i) (o,o). Переводить курсор у зазначену позицію поточного вікна або повертає позицію

attribute(Атрибут), (integer) – (io). Встановлює значення атрибута Атрибут за замовчуванням для всіх позицій екрана.

А.6 Предикати обробки рядків

frontchar(Рядок, Перший_символ, Залишок_рядка) (string, char, string) – (i,io,io) (o,i,i) Предикат діє так, ніби була визначена рівність Рядок = Перший_символ + Залишок_рядка або Рядок – зв'язана змінна, або обидва останніх параметри – зв'язані змінні. У випадку (i,i,i) предикат щирий, якщо ця рівність справедлива.

fronttoken(Рядок, Знак, Залишок_рядка) (string, string, string) – (i,io,io) (o,i,i) Тут Рядок = Знак + Залишок_рядка або зв'язана змінна, або обидва останніх параметри – зв'язані змінні. Предикат успішно виконується, якщо другий аргумент зв'язаний з першим знаком рядка, а третій аргумент – з її залишком. Під Знаком мається на увазі послідовність символів, що є або ім'ям, що відповідає синтаксисові Прологу; або числом (попередній його знак +, – і т.п. розглядається окремо); або символом, але не пробілом.

frontstr(Довжина, Вхідний_рядок, ПочатокРядка, ЗалишокРядка) (integer, string, string, string) – (i,i,o,o) Предикат розділяє Вхідний_рядок на дві частини. Початок_рядка буде містити стільки символів, скільки зазначено першим аргументом, при цьому Залишок_рядка буде зв'язаний із символами, що залишилися.

concat(Рядок_1, Рядок_2, Рядок_3), (string, string, string) – (i,i,о), (i,o,i) (io,i,i). Предикат здійснює конкатенацію першого і другого аргументів; результат зв'язується з третім аргументом (Рядок_3 = Рядок_1+Рядок_2). Аргументи Рядок_1 і Рядок_2 повинні бути зв'язаними.

str_len(Рядок, Довжина) (string , integer) – (i,i), (i,o). Предикат виконується успішно, якщо у випадку (i,i) перший аргумент має стільки символів, скільки зазначено другим, у випадку (i,o) другий аргумент буде зв'язаний з числом символів Рядка.

isname(Рядок) (string) – (i). Предикат виконується успішно, якщо аргумент є ім'ям, що відповідає синтаксисові Турбо-Пролога.

А.7 Предикати роботи з графікою

Графічні можливості Турбо-Пролога реалізовані для двох рівнів: пунктирної графіки, коли використовуються команди виду “накреслити лінію, що проходить через зазначені крапки” і графіки побудови “від руки”, за допомогою кольорового пера. Перед тим як використовувати команди графіки Турбо-Пролога, слід встановити екран у графічний режим, а по його закінченні очистити екран і повернутися до текстового режиму. Слід зазначити, що текст і графіка можуть разом використовуватися усередині вікна і на повному екрані. Графічний предикат має форму:

graphics(Режим, Палітра, Колір_фону) (integer, integer, integer) – (i,i,i). Цей предикат ініціалізує екран на середній, високий або надвисокий ступінь дозволу графіки. Можливі значення режиму і результуючого формату екрана зазначені в таблиці А.1.

Таблиця А.1 – Параметтри режимів екрану

Режим

Стовпців

Рядків

Опис

1 2 3 4 5

320 640 320 640 640

200 200 200 200 350

Середній дозвіл, 4 кольору Високий дозвіл, чорно-білий екран Середній дозвіл, 16 кольорів Високий дозвіл, 16 кольорів Надвисокий дозвіл

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

Чорний Синій Зелений Блакитний Червоний Бузковий Коричневий Білий Сірий Яскраво-синій Яскраво-зелений Яскраво-блакитний Яскраво-червоний Яскраво-бузковий Жовтий Яскраво-білий

– 0 – 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 – 10 – 11 – 12 – 13 – 14 – 15

Є два основних графічних предикати – dot і line (крапка і лінія).

dot(Рядок, Стовпець, Колір) (integer, integer, integer) – (i,i,io). Предикат dot(...) поміщає крапку кольору, зазначеного третім параметром, у позицію обумовлену першими двома параметрами, що є цілими від 0 до 31999 і не залежать від поточного режиму екрана.

linе(Рядок_1, Стовпець_1, Рядок_2, Стовпець_2, Колір) (integer, integer, integer, integer, integer) – (i,i,i,i,i). Предикат line(...) креслить лінію через крапки, позиції яких зазначені параметрами рядка і стовпця, колір лінії визначається останнім аргументом.

У Турбо-Пролозі є предикати, що реалізують графікові побудови “від руки”, за допомогою кольорового пера. Основними елементами графіки цього рівня є: зображене на екрані трикутне перо, так звана “черепаха” і прості направляючі команди типу “уперед”, “вправо” і т.п.

При вході в графічний режим екран очищається, з'являється “черепаха”, “перо” знаходиться в хвості. Направляється “черепаха” за допомогою стандартних предикатів, а “перо” залишає слід на екрані. Дія цих предикатів залежить від позиції “черепахи”, напрямку, включене “перо” чи ні, від кольору “пера”. Основні предикати черепашачої графіки:

pendown – активізує “перо”

penup – дезактивізує “перо”

репсоlоr(Колір) – визначає колір сліду

forward(Крок), (integer) – (i). Вказує число кроків “черепашки” з поточної позиції.

back(Крок), (integer) – діє протилежним образом

right(Кут) (integer) – (i), (о). Повертає “черепашку” праворуч. Якщо Кут – зв'язана змінна, то “черепашка” повертається на зазначене число градусів, якщо вільна, то вона зв'язується з поточним напрямком.

left(Кут), (integer) – (i). Аналогічно повертає “черепашку” ліворуч.

А.8 Різні предикати

findall(Змінна, <атом>, Спискова_змінна). Предикат findall використовується для збору значень, отриманих при поверненні, у список, якщо атом є предикатом з аргументами, представленими дійсними для Прологу іменами змінних, а Змінна одна з змінних цього предиката, то вхідна в предикат Спискова_змінна буде зв'язана зі списком значень для цієї змінної, котра виходить коли предикат успішно виконується.

random(Дійсна_змінна), (real) – (о). Предикат повертає дійсне число X, що задовільняє умові 0 < Х < 1.

sound(Тривалість, Частота), (integer, integer) – (i,i). Предикат викликає звучання сигналу потрібної Частоти і заданої Тривалості.

date(Рік, Місяць, День) (integer, integer, integer) – (о,о,о), (i,i,i). У випадку (о,о,о) читає дату з комп'ютера, а у випадку (i, i, i) – встановлює її.

time(Години, Хвилини, Секунди, Мілісекунди), (integer, integer, integer, integer) – (о,о,о,о) (i,i,i,i) У випадку (i,i,i,i) встановлює час у комп'ютері, а у випадку (о,о,о,о) читає його.

system(Командний_рядок), (string) – (i). Аргумент предиката може бути будь-як командою ДОС або виконуваним файлом.

consult(Ім’я_файлу) – Завантажити базу даних з файлу Ім’я_файлу.

save(Ім’я_файлу) – Вивантажити базу даних у файл Ім’я_файлу.

exit – Повернення до системи меню.

fail – Завжди має значення false і викликає повернення.

nl – Перехід на новий рядок

beep – Короткий звук.

free(Змінна) – Успіх, якщо Змінна не зв'язана ні з яким значенням

bound(Змінна) – Успіх, якщо Змінна зв'язана з яким-небудь значенням