- •Белорусский национальный технический университет
- •Функциональное и логическое программирование
- •Лабораторная работа 1. Основы работы с Visual Prolog в режиме Test Goal.
- •Лабораторная работа 2. Составление простейшей пролог-программы.
- •2. Краткие справочные данные.
- •Лабораторная работа 3. Формирование правил.
- •2. Краткие справочные данные.
- •3. Содержание задания по лабораторной работе.
- •4. Содержание отчета.
- •Лабораторная работа 4. Рекурсия.
- •3. Содержание задания по лабораторной работе.
- •4. Задачи на рекурсию.
- •5. Содержание отчета.
- •Лабораторная работа 5. Использование отсечения в пролог-программах.
- •2. Краткие справочные данные.
- •Содержание задания по лабораторной работе.
- •4. Содержание отчета.
- •Лабораторная работа 6. Работа со списками.
- •5. Содержание отчета.
- •Лабораторная работа 7. Работа со строками.
- •Лабораторная работа 8. Использование составных объектов.
- •[Член_семьи(“Инна”,”Иванова”,дата(20,март,1971), работа(студент,45)),
- •Лабораторная работа 9. Работа с файлами.
- •Лабораторная работа 10. Построение меню.
- •Лабораторная работа 11. Динамические базы данных.
- •Лабораторная работа 12. Внешние базы данных.
- •Содержание задания по лабораторной работе.
- •Содержание отчета:
- •Содержание задания по лабораторной работе.
- •Содержание отчета:
- •Лабораторная работа 14. Рекурсивное объявление доменов.
- •Краткие справочные данные.
- •Текст Пролог-программы
- •Содержание задания по лабораторной работе.
- •Содержание отчета:
- •Лабораторная работа 15. Основы работы в среде визуального программирования visual prolog.
- •Содержание задания по лабораторной работе.
- •Лабораторная работа 16. Система программирования mulisp.
- •Содержание задания по лабораторной работе.
- •Лабораторная работа 17. Определение функций в lisp.
- •2. Краткие справочные данные.
- •Представление данных в Лисп.
- •Содержание задания по лабораторной работе.
- •Литература
- •Приложение
- •Содержание
Литература
Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual Prolog. - СПб.: БХВ-Петербург, 2003.
Братко И. Программирование на языке Пролог для искусственного интеллекта. - М.: Мир, 1990.
Городняя Л.В. Основы функционального программирования. М.: ИНТУИТ.РУ «Интернет-университет Информационных Технологий», 2004.
Доорс Дж., Рейблейн А.Р., Вадера С. Пролог - язык программирования будущего. - М.: Финансы и статистика, 1990.
Ин Ц., Соломон Д. Использование Турбо-Пролога. М.:Мир,1993.
Клоксин У., Меллиш К. Программирование на языке Пролог. - М.: Мир, 1987.
Ковальков А.Т., Ковалькова И.А. Лабораторный практикум по дисциплине “Функциональное и логическое программирование” для студентов специальностей 1-40 01 01 и 1-40 01 02. – Минск, БГПА, 2005.
Макаллистер Дж. Искусственный интеллект и Пролог на микро-ЭВМ. - М.: Машиностроение, 1990.
Малпас Дж. Реляционный язык Пролог и его применение. - М.: Наука, 1990.
Марселлус Д. Программирование экспертных систем на Турбо-Прологе. - М.: Финансы и статистика, 1994..
Набебин А.А. Логика и Пролог в дискретной математике. - М.: Изд. МЭИ, 1996.
Стерлинг Л., Шапиро З. Искусство программирования на языке Пролог. - М.: Мир, 1990..
Стобо Дж. Язык программирования Пролог. - М.: Радио и связь, 1993.
Хендерсон П. Функциональное программирование. -М.: Мир, 1983.
Хювёнен Э., Сеппянен И. Мир ЛИСПа. Том 1, 2. -М.: Мир, 1990.
Шрайнер П.А. Основы программирования на языке Пролог. – М.: Интернет – Ун-т Инфом. Технологий, 2005.
Янсон А. Турбо-Пролог в сжатом изложении. - М.:Мир, 1991.
Приложение
domains
день,год,оклад=integer
имя,фамилия,месяц,должность=string
дата=дат(день,месяц,год)
работа=раб(должность,оклад)
член_семьи=чл_с(имя,фамилия,дата,работа)
список_детей=член_семьи*
список_имен_детей=string*
predicates
семья(член_семьи,член_семьи,список_детей) %описание всех членов семьи
муж(член_семьи) %муж
жена(член_семьи) %жена
список_детей_семьи(список_детей) %дети
количество_элементов_списка(список_детей,integer) %подсчет количества
%элементов в списке
количество_детей_семьи(string,integer) %количество детей в данной семье
имена_детей(string,список_имен_детей) %список имен детей в данной семье
выбор_имен_детей(список_детей,список_имен_детей) %выбор имен детей
%из списка детей
clauses
семья(чл_с("Иван","Иванов",дат(1,"май",1940),раб("инженер",200)),
чл_с("Анна","Иванова",дат(15,"январь",1945),раб("врач",180)),
[чл_с("Олег","Иванов",дат(22,"март",1970),раб("студент",40)),
чл_с("Инна","Иванова",дат(7,"июль",1975),раб("ученица",0))]).
семья (чл_с("Лев","Сидорик",дат(12,"февраль",1949),раб("хирург",300)),
чл_с("Раиса","Сидорик",дат(5,"ноябрь",1952),раб("домохозяйка",0)),
[чл_с("Борис","Сидорик",дат(2,"май",1973),раб("артист",140))]).
семья (чл_с("Степан","Петров",дат(1,"август",1940),раб("шофер",200)),
чл_с("Мария","Дрозд",дат(15,"июнь",1945),раб("кассир",180)),[]).
семья (чл_с("Леонид","Загорский",дат(1,"май",1960),раб("инженер",200)),
чл_с("Нина","Загорская",дат(5,"апрель",1965),раб("техник",180)),
[чл_с("Елена","Загорская",дат(2,"январь",1983),раб("ученица",0)),
чл_с("Ева","Загорская",дат(15,"февраль",1985),раб("ученица",0)),
чл_с("Софья","Загорская",дат(15,"февраль",1985),раб("ученица",0))]).
семья (чл_с("Николай","Савич",дат(1,"март",1970),раб("плотник",200)),
чл_с("Нина","Савич",дат(15,"январь",1965),раб("маляр",180)),
[чл_с("Игорь","Савич",дат(12,"ноябрь",1990),раб("ученик",0)),
чл_с("Игнат","Савич",дат(7,"декабрь",1994),раб("дошкольник",0))]).
семья (чл_с("Кирилл","Казак",дат(11,"май",1970),раб("аспирант",100)),
чл_с("Жанна","Казак",дат(15,"март",1975),раб("студентка",50)),
[чл_с("Ольга","Казак",дат(17,"июль",1995),раб("дошкольница",0))]).
семья (чл_с("","",дат(0,"",0),раб("",0)),
чл_с("Анна","Лоза",дат(15,"март",1975),раб("студентка",50)),
[чл_с("Ольга","Лоза",дат(17,"июль",1995),раб("дошкольница",0))]).
муж(чл_с(Имя,Фам,Дат,Раб)):-семья(чл_с(Имя,Фам,Дат,Раб),_,_).
жена(чл_с(Имя,Фам,Дат,Раб)):-семья(_,чл_с(Имя,Фам,Дат,Раб),_).
список_детей(Сп_дет):-семья(_,_,Сп_дет).
количество_элементов_списка([],0).
количество_элементов_списка([_|Хвост],Кол):-
количество_элементов_списка(Хвост,Кол1),Кол=Кол1+1.
количество_детей_семьи(Фам_мужа,Кол_дет):-
семья(чл_с(_,Фам_мужа,_,_),_,Сп_дет),
количество_детей_семьи(Сп_дет,Кол_дет).
имена_детей(Фам_мужа,Сп_имен_дет):-
семья(чл_с(_,Фам_мужа,_,_),_,Сп_дет),
выбор_имен_детей(Сп_дет,Сп_имен_дет).
выбор_имен_детей([],[]).
выбор_имен_детей([Ребенок|Хвост_списка_детей],[Имя|Хвост_имен]):-
Ребенок=чл_с(Имя,_,_,_),
выбор_имен_детей(Хвост_списка_детей,Хвост_имен).
