Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_AYaII_buklet_maket (1).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
857.6 Кб
Скачать

4.4. Пример решения задачи

    1. Тема работы: работа со списками в среде Turbo Prolog.

    2. Цель работы: знакомство с основными операциями над списками в среде Turbo Prolog 2.0 и получение практических навыков выполнения обработки списков.

    3. Индивидуальное задание: заменить в списке два подряд идущие одинаковые значения их порядковыми номерами.

    4. Разработка метода решения задачи.

Предикат, выполняющий задание, должен быть рекурсивным и иметь три формулировки:

  • Если второй параметр является пустым списком, то третий параметр также является пустым списком.

  • Если первые два элемента списка равны, то на обратном ходу рекурсии в голову результирующего списка нужно дописать текущее значение счетчика элементов и значение на единицу больше. В рекурсивном вызове в качестве хвоста списка передать полученный список (второй аргумент), но без первых двух элементов.

  • Во всех остальных случаях разделить второй параметр-список на голову и хвост, увеличить значение счетчика на единицу, на обратном ходу рекурсии добавить голову к результирующему списку. В рекурсивном вызове в качестве второго параметра передать хвост списка (второго аргумента).

    1. Описание предикатов, разработанных для реализации метода решения задачи на языке Turbo Prolog.

      Предикат

      Цель использования

      search(integer,ii,ii)

      (i,i,o) – (счетчик,исх_список,рез_список)

      Замена парных элементов списка их порядковыми номерами

    2. Стандартные предикаты, используемые для решения задачи:

Предикат

Цель использования

clearwindow

Очистка экрана

write

Вывод значения на экран

    1. Текст программы.

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).

    1. Результаты выполнения программы.

Исходный список: [6,6,6,5,5,2,1,1]

Результирующий список: [1,2,6,4,5,2,7,8]

    1. Выводы

В ходе выполнения лабораторной работы были усвоены понятия списка в Прологе и основные операции над списками.

Контрольные вопросы

  1. Что такое список?

  2. Что такое домен? Назовите стандартные домены.

  3. Объясните понятия головы и хвоста списка.

  4. Какими типами данных могут быть элементы списка?

  5. Можно ли работать со списком, элементами которого являются списки?

  6. Как объявить домен типа «список»?

  7. Что такое «конкатенация» списков? Как выполняется конкатенация списков?

  8. Как вывести на экран все элементы списка?

  9. Как ввести данные в список?

  10. Как подсчитать количество элементов списка?

  11. Что такое «прямой» и «обратный» ход рекурсии?

Лабораторная работа 5

Тема работы: работа со строками в среде Turbo Prolog

Цель работы: изучение основных предикатов обработки строк в среде Turbo Prolog 2.0 и получение навыков работы со строками

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]