Методичка: Логическое программирование - текст методички. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Методичка

Логическое программирование

Банк рефератов / Компьютерные сети

Рубрики  Рубрики реферат банка

закрыть
Категория: Методичка
Язык методички: Русский
Дата создания: 2002
Дата добавления:   
 
Скачать
Microsoft Word, 241 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной работы
Текст
Факты использования методички

Узнайте стоимость написания уникальной работы

ВВЕДЕНИЕ
Лабораторные работы по курсу "Логическое программирование" являются эффективным средством развития у студентов навыков самостоятельной научноисследовательской работы. В ходе выполнения лабораторных работ студенты:
 практически усваивают наиболее важные теоретические положения курса;
 закрепляют навыки работы на ЭВМ и знакомятся с основными приемами реализации элементов систем программирования;
 развивают способности к самостоятельной творческой работе при решении системных задач.
Лабораторный практикум включает работы, предусмотренные учебной программой курса "Логическое программирование".
Первые три работы являются вводными в том смысле, что знакомят студентов с новым языком программирования, в основе построения которого положена иная математическая модель, если сравнивать этот язык с процедурноориентированными языками, такими, как Паскаль, Си и т.д. Простота математической модели этого языка позволяет студентам, имеющим опыт работы на персональном компьютере и знакомым с системой Турбо, уже на первых занятиях самостоятельно анализировать и разрабатывать простейшие логические, программы. Основной метод работы на этих занятиях  это работа по аналогии. Поэтому каждая программа, предлагаемая студентам для исследования, должна выполняться в режиме трассировки. Одна из основных целей первых трех работ – добиться полного понимания учащимися механизма унификации и механизма бектрекинга, которые являются основой вычислительной модели логического программирования.
В последующих трех работах студенты изучают основные приемы программирования на языке Пролог на примере обработки самых распространенных структур данных, таких, как списки, деревья, графы, строки и файлы. В этих работах, так же как и в трех первых, важной частью являются исследования и анализ готовых программ, но разработка индивидуальных заданий носит творческий характер.
Практические навыки и умения, полученные студентами в процессе выполнения данных лабораторных работ, позволят им в дальнейшем, в случае необходимости, продолжить более глубокое изучение данной проблемы.
Для каждой лабораторной работы определяется ее содержание и содержание отчета.
Отчет по каждой лабораторной работе защищается на занятиях в сроки, предусмотренные графиком самостоятельной работы. Защита отчета проходит в форме беседы между студентом и преподавателем. Она заключается в проверке результатов выполнения задания, выяснения теоретических положений темы задания и ответов на вопросы, которые приведены в конце каждой работы.
Зачет по лабораторному практикуму студент получает после выполнения и защиты всех установленных планом работ.
Зачет по лабораторному практикуму студент получает после выполнения и защиты всех установленных планом работ.
 
Лабораторная работа №1
Введение В ТурбоПролог
Цель работы
Ознакомиться с особенностью работы Турбооболочки для языка ПРОЛОГ, с принципами программирования па языке ПРОЛОГ, структурой программы в ТурбоПрологе.
Содержание работы
1. Изучить материал, изложенный в литературе [3, с. 645].
2. Изучить методические указания к лабораторным работам № 1,2 (с. )
2. Выполнить задания, приведенные в данной лабораторной работе.
3. Оформить отчет.
4. Защитить лабораторную работу, ответив на контрольные вопросы.
Содержание отчета
1.         Тексты задания.
2.         Тексты программ.
3.         Результаты выполнения.
4.         Схема поиска решения или пояснения к полученным результатам.
Методические указания
Для того чтобы лучше понять алгоритм поиска решения в Прологе и принцип программирования в этой системе, необходимо выполнить все предложенные упражнения и задания в режиме трассировки.
Задания
1.         Следующая программа представляет собой законченную программу ТурбоПролога, служащую небольшим телефонным справочником. Так как используются только стандартные типы данных – секция domains в этой программе не нужна.
predicates
    phone_number(symbol,symbol)
clauses
   phone_number(“Albert”,”ETY3665”) .
   phone_number(“Betty”,”5555233”).
   phone_number(“Carol”,”9091010”).
   phone_number(“Dororty”,”4388400”).
Наберите эту программу в окне редактора, запустите программу на выполнение, а затем по очереди задайте ей следующие вопросы:
a.         phone_number(“Carol”, Number)
b.         phone_number(Who,”4388400”)
c.         phone_number(“Albert”, Number)
d.         phone_number(Who,Number)
Теперь измените предложения. Предположим, что Kim и Dorothy имеют один и тот же номер телефона. Добавьте этот факт в секцию clauses и введите цель:
       phone_number(Who,”4388400”)
2.         Наберите эту программу в окне редактора
 predicates
    isletter(char)
clauses
    isletter(Ch):  'a'<= Ch, Ch<='z'.
    isletter(Ch):  'A'<=Ch, Ch<='Z'.
Запустите программу и испытайте по очереди каждую из этих целей:
a.         isletter('x')
b.         isletter('2')
c.         isletter('hello')
d.         isletter(a)
e.         isletter(X)
Определите декларативный смысл предложений. Объясните, почему некоторые цели не обрабатываются ТурбоПрологом.
 3. Наберите следующую программу в окне редактора
predicates
       can_buy(symol,symbol) /* может купить*/
       person(symbol)               /*человек*/
       car(symbol)                     /*машина*/
      likes(symbol,symbol)        /*нравится*/
      for_sale(symbol)               /*продается*/
clauses
          can_buy(Name, Model) :   
           person(Name) and
           car(Name) and
           likes(Name, Model) and
           for_sale(Model).
           person (kelly).
            person (judy).
            car(lemon).
           car(hot_rod).
           likes(pizza, hot_rod).
           likes(judy, pizza).
           for_sale (pizza).
           for_sale (lemon).
            for_sale (hot_rod).
Что могут купить Judy и Kelly? Кто может купить hot_rod. На приглашение Goal в диалоговом окне вы можете задать следующие вопросы:
can_buy (Who, What)       /* Who    =? What = ? */
can_buy (judy, What)       /* What =?                     */
can_buy (kelly, What)      /* What =?                     */
can_buy (Who, hot_rod) /* Who =?                      */
Добавьте факты о стоимости машины и о текущих счетах в банке у Kelly, Judy и т.д. Измените правило покупки автомобиля с учетом этих фактов. Проверьте новую программу теми же вопросами, что и раньше. Пролог отвечает именно то, что вы и ждали?
4. Данное задание выполните в ТурбоПрологе. Считая, что отношение РОДИТЕЛЬ определено как
            РОДИТЕЛЬ(пам,боб).
            РОДИТЕЛЬ(том,боб).
            РОДИТЕЛЬ(том,лиз).
            РОДИТЕЛЬ(боб,энн).
            РОДИТЕЛЬ(боб,пат).
            РОДИТЕЛЬ(пам,джим).
а) найдите, какими будут ответы на следующие вопросы:
            РОДИТЕЛЬ(джим,Х)
            РОДИТЕЛЬ(Х,джим)
            РОДИТЕЛЬ(пам,Х), РОДИТЕЛЬ(X,пат)
            РОДИТЕЛЬ(пам,Х), РОДИТЕЛЬ(X,У). РОДИТЕЛЬ(У,джим)
 
б) сформулируйте на Прологе следующие вопросы об отношении      РОДИТЕЛЬ;
            Кто родитель Пат?
            Есть ли у Лиз ребенок?
            Кто является родителем родителя Пат?
в) Переведите следующие утверждения в правила на Прологе:
            Всякий, кто имеет ребенка,  счастлив, введя одноаргументное отношение СЧАСТЛИВ.
            Всякий X, имеющий ребенка, у которого есть сестра или брат, имеет двух детей, введя новое отношение ИМЕТЬ_ДВУХ_ДЕТЕЙ.
            Определите отношение ВНУК (Х,У), используя отношение РОДИТЕЛЬ.
            Определите отношение ТЕТЯ (Х,У) через отношения РОДИТЕЛЬ и СЕСТРА.
Сформулируйте вопросы к вновь введенным правилам.
Контрольные вопросы
 
1. Что такое Прологпрограмма?
           2. Синтаксис и семантика Пролог  предложений.
3. Типы предложений Пролога, их назначение и декларативный смысл.
4. Переменная, ее роль и область действия в Пролог  программе.
5. Что является результатом работы Пролог  программы? Как он формируется?
6. Структура программы в ТурбоПрологе (основные разделы), краткая характеристика каждого раздела.
7. Согласование типов и преобразование типов в ТурбоПрологе.
Лабораторная работа №2
Разработка первой программы на Прологе
Цель работы
На примере простейших баз данных научиться описывать факты и простейшие отношения между объектами на языке Пролог.
Содержание работы
 
1. Прочитать теоретический материал [1, с. 1343], [2, c. 1847] и методические указания.
2. Выполнить индивидуальное задание. 
3. Оформить отчет.
4. Ответить на контрольные вопросы.
5. Защитить лабораторную работу.
Содержание отчета
1. Текст задания.
2. Описать декларативный смысл фактов и предложений разрабатываемой программы.
3. Описать декларативный смысл целей и привести деревья поиска решения для поставленных целей.
Методические указания к выполнению лабораторных работ № 1,2.
      Используя знания, полученные при выполнении первой лабораторной работы, напишите свою первую программу по аналогии с ранее рассмотренными программами.
Ниже приведены основные начальные сведения о Прологе и ТурбоПрологе, с которыми Вы познакомились, выполняя первую лабораторную работу.
1. Программы на Прологе включают в себя фразы двух типов (также известных под названием "предложения"): факты и правила.
Факты соответствуют связям и свойствам, о которых вы (программист) знаете, что они всегда истинны.
Правила соответствуют зависимым связям, так как они позволяют Прологу выводить одно утверждение из другого. Правило становится истинным, если доказывается, что истинно заданное множество условий. Каждое правило зависит от доказательства истинности соответствующих условий.
2. Все правила в Прологе имеют две части: заголовок и тело, соединенные символом "if". Символ "if" можно заменить обозначением ":". Заголовок содержит заключение правила. Тело  это множество (конъюнкция) условий, которые    должны быть истинны, для того, чтобы Пролог мог доказать истинность заголовка правила.
Факт – это частный случай правила. Факт – это правило, состоящее из одного заголовка (не содержащее тала).
3. Определив для Пролога множество фактов и правил, вы можете задавать   вопросы (формировать цель): это называется   запросом к   системе. Вопрос – это частный случай правила (правило без заголовка), содержащий только условия, требующие доказательства. Вопрос может быть конъюнктивным (конъюнкция целей). Пролога.
4. Для доказательства цели (ответа на запрос) механизм вывода Пролога ищет в программе правило или факт, заголовок которого сопоставляется (унифицируется) с целью. Пролог всегда   ищет   решение, начиная   с первого факта или правила в программе, и просматривает   их    до   достижения   самого   последнего. Найдя нужное правило, механизм вывода Пролога берет   из тела   этого правила условия (поочередно, слева направо)   и пытается их доказать, ставя новые цели для разрешения. Если все условия из тела правила оказываются истинны (доказаны из программы),   то цель считается истинной. Если же не   все    условия истинны      использование    правила   ни   к   чему не приводит. В этом случае Прологсистема пытается найти другое правило для доказательства исходной цели. Если же ей не удается этого делать, то поставленная цель не может быть выведена из программы (является ложной).
5. Программа   на   Турбо  Прологе   имеет   следующую   общую    структуру:
domains      /* ...объявление доменов ... */
 predicates /* ...объявление предикатов ... */
goal             /* ...подцель_1, подцель_2, и т.д. ... */
clauses         /* ...предложения (факты и правила) ... */
6. В секции clauses размещаются факты и правила, с которыми будет работать   Турбо  Пролог,      пытаясь    доказать   цель    программы.   
7. В секции predicates   объявляются    предикаты   и   типы (домены) аргументов этих предикатов. Имена предикатов должны начинаться с буквы (строчной), за   которой следует последовательность латинских букв,   цифр и символов подчеркивания (до 250 знаков). В именах предикатов нельзя использовать символы пробела, минуса, звездочки, обратной и прямой   черты.
 Объявление предиката   имеет   следующую   форму:
 
predicates   
     predicateName (argument_ type1, argument_ type2, ..., argument_typeN)
 
Здесь argument_ type1, argument_ type2, ..., argument_typeN – либо стандартные домены, либо домены, объявленные вами в секции domains. Объявление домена аргумента и описание типа аргумента суть одно и то же.
8. Секция   domains – это секция, в которой вы объявляете любые нестандартные   домены, используемые вами для аргументов ваших предикатов. Домены в Прологе являются аналогами типов в других языках. Основными стандартными доменами Турбо  Пролога   являются – char,   integer, real, string,   и symbol; более   подробно   стандартные   домены описаны в следующих разделах. Основная форма объявления доменов имеет следующий вид:
domains 
argument _type1, … , argument _typeN = < стандартный   домен >
 argument 1, … , argument N = < составной   домен 1 >;
                                                        < составной   домен 2 >;            
                                                                        <...>;
                                                        < составной домен N >.
9. В секции goal вы задаете внутреннюю цель своей программы, что позволяет программе запускаться независимо от среды разработки. Если внутренняя цель включена в программу, то Турбо Пролог выполняет поиск только первого решения, и связываемые с переменными значения не выводятся на экран. Если внутренняя цель не используется, то в процессе работы вы будете вводить в диалоговом окне внешнюю цель. При использовании внешней цели (без использования секции goal) ТурбоПролог ищет все решения и выводит в диалоговое окно все значения, связываемые с переменными, присутствующими в цели.
10. Арность (размерность) предиката   это число принимаемых им аргументов. Два предиката с одним именем могут иметь различную арность. Предикаты с одним именем, но с различными версиями арности должны собираться вместе и в секции predicates, и в секции clauses; при этом   предикаты с различными арностями (но с одним именем) рассматриваются как абсолютно разные.
11. Правила имеют форму:
ЗАГОЛОВОК :  <Подцель1>, <Подцель2>,…,<ПодцельN>.
 Для разрешения правила Пролог должен разрешить все его подцели, создав при этом соответствующее   множество связанных переменных. Если же одна из подцелей ложна, Пролог возвратится назад и просмотрит альтернативные решения предыдущих подцелей, а затем вновь пойдет вперед, но с   другими   значениями переменных. Такой процесс    называется   " поиск с возвратом ".
12. Символ Пролога "if" отличается от "IF", используемых в других языках: правило Пролога работает в соответствии с условной формой then/if, тогда как оператор других языков IF работает в соответствии с условной формой if/then.
13. Менее часто используемыми секциями программ на ТурбоПрологе являются секции database и constans, а также различные глобальные (global) секции (секция database будет нами использоваться в следующей лабораторной работе).
Задания
1. Разработайте   базу данных, содержащую сведения об игрушках: название игрушки (кукла, кубики, мяч, и т.д.), ее стоимость и возрастные границы детей, для которых игрушка предназначена. Получить следующие сведения:
а) название игрушек, цена которых не превышает 4 руб. и которые подходят детям 5 лет;
б) название игрушек, которые подходят как детям 4 лет, так и детям 10 лет;         
в) цены всех кубиков;
г) можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку 3 лет, и дополнительно мяч так,
чтобы суммарная стоимость покупки не превосходила 6 руб.;
д) название наиболее дорогих игрушек (цена которых отличается от самой дорогой игрушки не более чем на 1 руб.
2. Сведения об ученике состоят из его имени и фамилии, названии класса, отметок, полученных учениками в последней четверти. Составьте предложения, которые позволяли бы получить самую разнообразную информацию об учениках. Например:
а) можно было узнать, имеются ли в школе однофамильцы;
б) сколько отличников в такомто классе и т.д.
3. Разработайте базу данных библиотеки с самыми типичными отношениями между объектами (поиск книг по автору, поиск автора по названию книги, должники и т.д).
4. Разработайте базу данных  городской транспорт. (Простейший вариант.)
5. Разработайте базу данных  лекарства. Необходимо учесть симптомы болезни, возраст больного, противопоказания, стоимость, наличие и т.д.
6. Разработайте базу данных  продукты (магазины, ассортимент, стоимость, фирма производитель и т.д.).
7. Разработайте базу данных  одежда (по аналогии с заданием 1) .
8. Разработайте базу данных  кафедра (списочный состав, читаемые курсы, время и место проведения занятий, взаимозаменяемость и т.д.).
Контрольные вопросы
1. Что такое унификация? Алгоритм унификации. Приведите примеры.
2. Сравните операцию унификации с операцией присваивания в традиционных языках программирования.
3. Сравните вычислительные модели логического программирования: Пролога и ТурбоПролога.
4. Основной механизм управления в Прологе.
5. Дерево поиска решений. Способы обхода дерева. Влияет ли порядок правил и порядок целей в предложении на дерево поиска решений.
Лабораторная работа №3
Внутренняя база данных Турбо   Пролога
Цель работы
Понять принципы создания, управления и использования внутренних баз данных в ТурбоПрологе, научиться использовать их при проектировании программ.
Содержание работы
1.Ознакомиться со справочным   материалом,   приведенным в    методических указаниях.
2.В процессе изучения   справочного материала необходимо выполнить программы, приведенные в тексте, анализируя полученные результаты.      
3. Выполнить задание.
4. Оформить отчет.
5.Защитить работу.
 
Содержание отчета
1.         Текст задания.
2.         Тексты разработанных программ.
3.         Результаты выполнения.
4.         Привести схему поиска решения одной из поставленных целей.
В этой работе мы опишем, как нужно объявлять секции database и как можно изменить содержание вашей внутренней базы данных в процессе выполнения Пролог  программы.
Внутренняя база данных состоит из фактов, которые вы можете непосредственно добавлять и удалять из вашей программы на ТурбоПрологе во время ее исполнения. Вы можете объявлять предикаты, описывающие внутреннюю базу данных в секции database вашей программы и использовать эти предикаты таким же образом, как используются   предикаты,   описанные в секции predicates.
Для добавления новых фактов в базу данных в ТурбоПрологе используются предикаты asserta   и   assertz, а предикаты   retract   и   retractall служат для удаления существующих фактов. Вы можете изменить содержание вашей базы данных, сначала удалив факт, а потом вставив новую версию этого факта (или совершенно другой факт). Предикат   consult   считывает факты из файла и добавляет их к внутренней базе данных, a предикат   save сохраняет содержимое внутренней секции   database   в файле.
ТурбоПролог интерпретирует факты, принадлежащие к базе данных, таким же образом, как обычные предикаты. Факты предикатов внутренней базы данных хранятся в таблице, их можно легко изменять, тогда как обычные предикаты для достижении максимальной скорости компилируются в двоичный код. 
Объявление внутренней базы данных
Для того чтобы воспользоваться внутренней базой данных, необходимо объявить ее в секции database. Ключевое слово database определяет начало последовательности объявлений предикатов, описывающих внутреннюю базу данных. Секция database может выглядеть, например, так, как в следующем примере:
 
domains
        name, address=string
        age=integer
        genter=male; female
database
       person(name, address, age, gender)
 predicates
       male(name, address, age)
       female(name, age, gender)
       child(name, age, gender)
clauses
       male(Name, Address, Age) : person(Name, Address, Age, male) …
 
В этом примере вы можете использовать предикат person таким же образом, как используются другие предикаты ( male, female, child). Единственное отличие состоит в том, что вы можете добавлять и удалять факты для предиката person во время работы программы.
Важно отметить следующее:
1. Вы можете добавлять в базу данных только факты, но не правила.
2. Факты базы данных не могут содержать свободных переменных.
Информация о том, как обойти эти два ограничений, содержится в приложении "Метапрограммирование", в Справочном руководстве по Турбо  Прологу.
Допускается наличие нескольких секций database в программе, но для этого нужно явно указать  имя каждой секции database. Это требуется потому, что предикаты   consult   и   save могут загружать и сохранять определенную секцию database   по имени.
 
database – mydatabase
      myFirstRelation(integer) 
      mySecondRelation(real, string)
      myThirdRelation(string)
goal
       consult(“example.dba”, mydatabase),    
       retract(myFirstRelation(1)),
       asserta(myFirstRelation(0)),
       save(“example.dba”, mydatabase).
 
Такое описание создает базу данных с именем mydatabase. Если вы не дадите имени для внутренней базы данных, то по умолчанию ей присваивается стандартное имя dbasedom.
Важно понимать, что имена предикатов базы данных в модуле являются уникальными. В двух различных секциях database нельзя использовать одинаковые имена предикатов.
Для того, чтобы ввести в программу факты, существует три основных способа:
– включение фактов в состав вашей секции clauses;
– во время выполнения программы с помощью предикатов asserta и assertz;
– загрузка файла, содержащего факты базы данных, с использованием предиката consult.
 
Все стандартные предикаты ТурбоПролога ( asserta,    assertz,    retract,   retractall, consult   и save) могут иметь один или два аргумента. Необязательный второй аргумент представляет собой имя внутренней базы данных. Мы опишем эти предикаты далее. Обозначение "/1" и "/2" после каждого имени предиката указывает необходимое число аргументов для данной версии предиката.
Предикат asserta ставляет новый факт в базу данных перед имеющимися фактами для данного предиката, предикат assertz вставляет факты после данного предиката.
Добавление фактов имеет следующий формат:
 
аsserta(<факт>) 
аsserta(<факт>, databaseName)   
assertz(<факт>)    
assertz(<факт>, databaseName)
 
 Поскольку имена предикатов базы данных уникальны внутри программы или модуля, для предикатов asserta   и   assertz всегда известно, куда нужно добавлять факт. Однако, для того чтобы обеспечить работу с нужной базой данных, в целях проверки типа можно использовать необязательный второй аргумент.
Первый предикат следующего примера вставит факт о Suzanne, описанный предикатом person, после всех фактов person, хранящихся в текущий момент в памяти. Второй вставит факт о Michael перед всеми имеющимися фактами предиката   person, третий  вставит факт о   John    после всех других фактов likes   в базе данных перед всеми другими фактами likes.
 
         assertz (person(“Suzanne”, ”New Haven”, 35, female))
         asserta (person(“Michael”, ”New York”, 26, male))
         assertz (likes(“John”, “money”), likesDatabase)
         asserta (likes(“Susanne”, “hard work”))
 
После вызова этих предикатов база данных в памяти с произвольным обращением будет выглядеть так, как будто вы начали работу со следующими фактами:
         /* Внутренняя база данных  dbasedom*/
        person(“Michael”, ”New York”, 26, male).
         /*… другие факты person … */
        person(“Suzanne”, ”New Haven”, 35, female).
        /* Внутренняя база данных  likesDatabase */
        likes(“John”, “money”).
       /* … другие факты likes …*/
       likes(“Susanne”, “hard work”). 
                               
Предикат   retract(<факт>) удаляет первый факт в вашей базе данных, который совпадает с фактом <факт>. Этот предикат является недетерминированным (возвращает не одно решение). При поиске с возвратом предикат retract   возвращает альтернативные решения и удаляет все совпадающие факты до тех пор, пока они имеются. В случае базы данных с именем databaseName предикат retract имеет следующий формат:
retract(<факт>, databaseName ).
 
Предположим, в вашей программе имеются следующие секции database:
 
     database
      person(string, string, integer)
database – likesDatabase
 likes(sting, string)      
 dislikes(string, string)
    clauses
/ * база данных   dbasedom */
asserta(person(“Fred”, “Capitola”, 35, male)).
assert (person(“Fred”, “Omaha”, 37, male)).
assert (person(“Michael”, “Brooklin”, 26, male)).
/*база данных  likesDatabase*/
assert(likes(“John”, “money”)).  
assert(likes(“Jane”, “money”)).
assert(likes(“Chris”, “chocolate”)).  
assert(likes(“John”, “broccoli”)).
dislikes(“Fred”, “broccoli” ).
dislikes(“Michael”, “beer”).
   
Для программы с такими секциями database можно последовательно задать следующие цели:
retract(person("Fred", _, _, _))
retract(likes( _,"broccoli")) 
retract(likes( _, "money"), likesDatabase)
retract(person("Fred", _, _, _), likesDatabase)
 
Первая цель удалит первый факт person о Fred из базы данных dbasedom (имя которой задается по умолчанию). С помощью второй цели из базы данных likesDatabase будет удален первый факт, унифицируемый с likes(X, “broccoli”). При этом ТурбоПролог знает, из какой базы производить удаление, поскольку имена предикатов базы данных уникальны; предикат person находится только в неименованной базе данных, а предикат likes только в базе likesDatabase.
Третья и четвертая цель показывают, как Вы можете использовать для проверки типа второй аргумент. Третья цель успешно реализуется, удаляя первый факт, унифицируемый с likes(X,”money”)   из   likesDatabase. А четвертая цель выдаст ошибку, потому что нет (и не может быть) факта person в базе данных likesDatabase. Сообщение об ошибке выглядит следующим образом:
506 Type Error: The functor does belong to the domain (функтор не относится к данному домену).
Следующая цель иллюстрирует, как Вы можете получить и вывести на печать все значения базы данных с помощью недетерминированного предиката    retract:  
goal
    retract(person(Name, _, Age,_)),
   write(Name, “, ”, Age),
   fail.
 
С помощью предиката retract вы можете также удалить все факты из заданной секции базы данных. Если при вызове retract в качестве первого аргумента указана свободная переменная, то для определения того, из какой секции database нужно произвести удаление, будет анализироваться второй аргумент. Например:
goal
retract(X, mydatabase), write(X), fail.
  
Предикат retractall(<факт>) удаляет из вашей базы данных все факты, унифицируемые с термом <факт>. Этот предикат всегда завершается успешно и является детерминированным. Из retractall выходные значения переменных получить нельзя. Это означает, что нужно использовать анонимные переменные, обозначаемые символом подчеркивания   "_". Для задания имени базы данных в предикат    retractall   вводится второй аргумент:
      retractall(<факт>, databaseName).
Так же как и в случае предикатов    assert   и   retract , для проверки типа можно использовать второй аргумент. Если при вызове предиката retractall в качестве первого аргумента используется символ подчеркивания, то из указанной секции database можно удалить все факты.
 Следующая цель удаляет все факты о мужчинах из базы данных с фактами person: 
         retractall(person(_, _ , _ male )).
Следующая цель удаляет все факты из базы mydatabase:
        retractall(_ , mydatabase).
 
Предикат   consult   считывает из файла   fileName   факты, описанные в секции database, и вставляет их в конец соответствующей секции внутренней базы данных (аналогично тому, как предикат assertz включает факты). Предикат consult имеет один или два аргумента:
consult(fileName) 
consult(fileName, databaseName)
Однако, в отличии от assertz, если вы вызовете consult только с одним аргументом (без имени базы данных ), то в файле должны находиться только факты из указанной базы данных.   Если файл содержит чтонибудь кроме фактов указанной базы, то предикат consult, когда он дойдет до этого, возвратит ошибку.
Обратите внимание, что предикат   consult считывает по одному факту. Если файл содержит десять фактов, а в седьмом факте имеется какаянибудь синтаксическая ошибка, consult занесет шесть первых фактов в базу данных, после чего система выдаст сообщение об ошибке.
Отметим, что предикат   consult может считывать файлы только в том формате, который создает предикат save (для включения фактов с максимально возможной скоростью). Файлы не должны содержать:
 прописных символов;
 пробелов за исключением тех, которые содержатся внутри;
 строк в двойных кавычках;
 комментариев;
 пустых строк;
 символов без двойных кавычек.
При создании или изменении файла с фактами в редакторе, а не программно, нужно соблюдать аккуратность.
 
Предикат save сохраняет факты из указанной базы данных в файле. Этот предикат имеет один или два аргумента.
save( fileName)
save( fileName, databaseName)
 
При вызове предиката   save только с одним аргументом (без имени базы данных ) в файле   fileName   будут сохранены факты из базы данных databasedom, используемой по умолчанию.
При вызове предиката save с двумя аргументами (имя файла и имя базы данных) в указанном файле будут сохранены факты из секции   databaseName   внутренней базы данных.
 
Итак, перед выполнением лабораторной работы суммируем полученные сведения:
1. Внутренняя база ТурбоПролога состоит из фактов вашей программы, сгруппированных в секции database. Предикаты, определяемые пользователем и используемые в этих группах фактов, можно объявлять с помощью ключевого слова database.
2.Секциям database можно давать имена (с помощью которых создается соответствующий внутренний домен). По умолчанию доменом для неименованной секции database является домен dbasedom. В программе может присутствовать несколько секций   database, но каждая из них при этом должна иметь уникальное имя. Заданный предикат базы данных можно описать только в одной секции database.
3. С помощью стандартных предикатов asserta, assertz и consult можно добавлять факты к внутренней базе данных во время работы программы. Можно также с помощью предикатов   retract   и   retractall   удалять эти факты во время работы программы.
4. Предикат   save сохраняет факты из секции database в файле (в определенном формате). С помощью редактора можно создавать или редактировать такой файл фактов, а затем можно вносить факты из файла в программу с помощью предиката consult.
5. Вы можете обращаться к предикатам базы данных в программе таким же образом, как и ко всем другим предикатам.
6. При использовании внутренних доменов, сгенерированных для секции database, можно работать с фактами, как с термами.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
— Семочка, радость моя! Ты после женитьбы похудел и осунулся, она шо, не кормит тебя?!
— Мама, ну шо вы такое говорите, свадьба была только вчера...
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, методичка по компьютерным сетям "Логическое программирование", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru