
- •Предисловие
- •Лабораторная работа 1
- •Темы для предварительной проработки
- •1.1. Порядок выполнения работы
- •1.2. Содержание отчета
- •1.3. Индивидуальные задания
- •1.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 1а
- •Приложение 1б
- •Приложение 1в
- •Приложение 1г
- •Лабораторная работа 2
- •Темы для предварительной проработки
- •2.1. Порядок выполнения работы
- •2.2. Содержание отчета
- •2.3. Индивидуальные задания
- •2.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 2а
- •Приложение 2б
- •Лабораторная работа 3
- •1.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 3а
- •Приложение 3б
- •Приложение 3в
- •Приложение 3г
- •Лабораторная работа 4
- •4.4. Пример решения задачи
- •Контрольные вопросы
- •Лабораторная работа 5
- •Темы для предварительной проработки
- •5.1. Порядок выполнения работы
- •5.2. Содержание отчета
- •5.3. Индивидуальные задания
- •5.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 5а
- •Лабораторная работа 6
- •Темы для предварительной проработки
- •6.1. Порядок выполнения работы
- •6.2. Содержание отчета
- •6.3. Индивидуальные задания
- •6.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 6а
- •Приложение 6б
- •Константы типа драйвера
- •Константы режимов драйвера
- •Константы цветов
- •Константы стиля и толщины линий (для предикатов GetLineStyle, SetLineStyle)
- •Константы типа шрифта (задаются в предикате settextstyle(Font,Direction,Charsize))
- •Лабораторная работа 7
- •Темы для предварительной проработки
- •7.1. Порядок выполнения работы
- •7.2. Содержание отчета
- •7.3. Индивидуальные задания
- •7.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 7а
- •Приложение б
- •Редактор о.І. Шпільова
- •61002 Харків, вул. Фрунзе, 21
4.4. Пример решения задачи
Тема работы: работа со списками в среде Turbo Prolog.
Цель работы: знакомство с основными операциями над списками в среде Turbo Prolog 2.0 и получение практических навыков выполнения обработки списков.
Индивидуальное задание: заменить в списке два подряд идущие одинаковые значения их порядковыми номерами.
Разработка метода решения задачи.
Предикат, выполняющий задание, должен быть рекурсивным и иметь три формулировки:
Если второй параметр является пустым списком, то третий параметр также является пустым списком.
Если первые два элемента списка равны, то на обратном ходу рекурсии в голову результирующего списка нужно дописать текущее значение счетчика элементов и значение на единицу больше. В рекурсивном вызове в качестве хвоста списка передать полученный список (второй аргумент), но без первых двух элементов.
Во всех остальных случаях разделить второй параметр-список на голову и хвост, увеличить значение счетчика на единицу, на обратном ходу рекурсии добавить голову к результирующему списку. В рекурсивном вызове в качестве второго параметра передать хвост списка (второго аргумента).
Описание предикатов, разработанных для реализации метода решения задачи на языке Turbo Prolog.
Предикат
Цель использования
search(integer,ii,ii)
(i,i,o) – (счетчик,исх_список,рез_список)
Замена парных элементов списка их порядковыми номерами
Стандартные предикаты, используемые для решения задачи:
Предикат |
Цель использования |
clearwindow |
Очистка экрана |
write |
Вывод значения на экран |
Текст программы.
domains i=integer ii=i*
predicates
search(i,ii,ii)
clauses
search(C,[X,X|Y],[C,C1|L]):-
C1=C+1,C2=C+2,
search(C2,Y,L).
search(C,[X|Y],[X|L]):-
C1=C+1,
search(C1,Y,L).
search(_,[],[]).
goal
clearwindow,
S=[6,6,6,5,5,2,1,1],
search(1,S,L),
write(”Исходный список: ”,S,”\n”),
.write(”Результирующий список: ”,L).
Результаты выполнения программы.
Исходный список: [6,6,6,5,5,2,1,1]
Результирующий список: [1,2,6,4,5,2,7,8]
Выводы
В ходе выполнения лабораторной работы были усвоены понятия списка в Прологе и основные операции над списками.
Контрольные вопросы
Что такое список?
Что такое домен? Назовите стандартные домены.
Объясните понятия головы и хвоста списка.
Какими типами данных могут быть элементы списка?
Можно ли работать со списком, элементами которого являются списки?
Как объявить домен типа «список»?
Что такое «конкатенация» списков? Как выполняется конкатенация списков?
Как вывести на экран все элементы списка?
Как ввести данные в список?
Как подсчитать количество элементов списка?
Что такое «прямой» и «обратный» ход рекурсии?
Лабораторная работа 5
Тема работы: работа со строками в среде Turbo Prolog
Цель работы: изучение основных предикатов обработки строк в среде Turbo Prolog 2.0 и получение навыков работы со строками