Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Самарский государственный архитектурно-строительный университет Факультет информационных систем и технологий Кафедра прикладной математики и вычислительной техники Осенний семестр 2013/14 учебного года Лабораторная работа 1 по дисциплине «Интеллектуальные информационные системы» Выполнил: студент группы ГИП-109 Демин В.Н. Проверила: д.т.н., профессор Прохорова О.В. Оценка______________ Дата __ ____________ Самара 2013 г. 1 Оглавление Постановка задачи проектирования .......................................................................................3 1. Аналитическая часть ...........................................................................................................4 2. Алгоритмическая часть .......................................................................................................6 3. Конструкторская часть ........................................................................................................7 4. Тестирование кода .............................................................................................................8 Библиографический справочник ............................................................................................9 2 Постановка задачи проектирования Задачи лабораторной работы: A. Написать и отладить код функции, которая вводит два числа. Если это числа, то функция печатает их сумму и разность, иначе печатает nil. B. Написать и отладить код функции, которая будет брать один аргумент, являющийся положительным целым числом и возвращать сумму всех чисел между 1 и этим числом. 3 1. Аналитическая часть Пролог (фр. Programmation en Logique) — язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. Основными понятиями в языке Пролог являются факты, правила логического вывода и запросы, позволяющие описывать базы знаний, процедуры логического вывода и принятия решений. Факты в языке Пролог описываются логическими предикатами с конкретными значениями. Правила в Прологе записываются в форме правил логического вывода с логическими заключениями и списком логических условий. Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщёнными сведениями. В Прологе выполняются следующие операции: +, -, *, /, mod - остаток от целочисленного деления. Чтобы арифметическое выражение рассчитывалось, необходимо использовать встроенный оператор is, который заставляет выполнять арифметические операции. Встроенные предикаты – предикаты, определенные в Прологе, для которых не существует процедур в базе данных. 4 Когда интерпретатор встречает цель, которая сравнивается с встроенным предикатом, он вызывает встроенную процедуру. Встроенные предикаты обычно выполняют функции, не связанные с логическим выводом. Встроенные предикаты обеспечивают возможности ввода-вывода информации: 1. write/1 - этот предикат всегда успешен. Когда он вызывается, побочным эффектом будет вывод значения аргумента на экран. 2. nl/0 - этот предикат всегда успешен. Когда он вызывается, то побочным эффектом будет перевод на следующую строку. 3. tab/1 - этот предикат всегда успешен. Когда он вызывается, то побочным эффектом будет печать количества пробелов, заданное аргументом. Аргумент должен быть целым. 4. read/1 - этот предикат читает терм, который вводится с клавиатуры и заканчивается точкой. Этот терм сопоставляется с аргументом. Пролог имеет несколько предикатов для обработки символов. Рассмотрим предикаты, которые дают положительный ответ в случае соответствия переменной ее назначению: atom(X) - да, если X-атом. integer(X) - да, если X-целое. float(X) – да, если X – действительное. atomic(X) - да, если X-целое или атом. var(X) - да, если X-не конкретизированная переменная. nonvar(X) - да, если X- терм, отличный от переменной, или уже конкретизированная переменная. 5 2. Алгоритмическая часть Алгоритм решения задачи А: Н1. [Сумма] Создание правила для нахождения суммы двух переменных X и Y. Н2. [Разность] Создание правила для нахождения разности и суммы двух переменных X и Y. Н3. [nil] Проверка введенных X и Y на то, что они являются числом, если хотя бы одно не число – печать nil. Н4. [Вывод] Вывод суммы и разности. Н6. Конец алгоритма. Алгоритм решения задачи Б: Н1.[Цикл] Создание правила цикла. Н2. [p] Объявление хранилища данных для хранения накопленной суммы, вызов цикла от 1 до N (I – возвращаемое значение счетчика), вызов данных из хранилища, суммирование счетчика и суммы из хранилища, сохранность данных в хранилище. Н3. [Вывод] Получение данных из хранилища, вывод суммы. Н4. Конец алгоритма. 6 3. Конструкторская часть Вопрос ?-f1. Ответ системы пролог Первое число = 3 Второе число = 6 3+6=9 3 - 6 = -3 Вопрос ?-f1(8). Ответ системы пролог 36 7 4. Тестирование кода А. Б. 8 Библиографический справочник 1. Братко И. Алгоритмы искусственного интеллекта на языке PROLOG. Изд.: Вильямс, 2004 2. Ездаков А.Л. Функциональное и логическое программирование. Изд.: Бином, 2009 3. http://www.mari-el.ru/mmlab/home/prolog/study_l.html 4. http://www. uztest.ru/abstracts/?idabstract=58 9