Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабПрактикум(1-5)_ПЗ в ИС_2011 .doc
Скачиваний:
27
Добавлен:
19.11.2019
Размер:
1.56 Mб
Скачать

Вычисление суммы списка чисел

Для вычисления суммы элементов списка чисел нужно использовать рекурсию, которая может быть можно воспользоваТак как в пустом списке элементов нет, сумма элементов пустого списка равна нулю. Для вычисления суммы элементов непустого списка нужно к сумме элементов хвоста добавить первый элемент списка Пример программы, вычисляющей сумму всех элементов списка чисел, представлен на рис. 4.8

Рис. 4.8. Программы вычисления суммы списка чисел

Практикум 4-6

  1. Проверьте, как работает программа вычисления суммы списка чисел, представленная на рис. 4.8

  2. Добавьте предикат для вычисления среднего значения

Практикум 4-7

По данным базы знаний из Практикума 2-1, в которой хранятся сведения о студентах и их средних баллах, вычислите общий средний балл по всем студентам.

Удаление элемента из списка

В большинстве практических задач не обойтись без предиката, удаляющего все вхождения заданного значения из списка. Предикат будет зависеть от трех параметров. Первый параметр будет соответствовать исходному списку, второй - значению элемента, который нужно найти в списке и удалить, а третий - результирующий список после удаления элементов.

Если первый элемент окажется удаляемым, то нужно перейти к удалению заданного значения из хвоста списка. Результатом в данном случае должен стать список, полученный путем удаления всех вхождений искомого значения из хвоста первоначального списка, а если первый элемент списка не совпадает с тем, который нужно удалять, то он должен остаться первым элементом результата, и нужно переходить к удалению заданного значения из хвоста исходного списка. Полученный в результате этих удалений список должен войти в ответ в качестве хвоста.

Рис. 4.9. Программа удаления всех вхождений элемента в список

Если нам нужно удалить не все вхождения определенного значения в список, а только первое, то можно добавить отсечение и работа программы прекратится после первого истинного решения.

Рис. 4.10. Программа вычисления элементов списка чисел

Практикум 4-8

Напишите программу для исключения из списка всех отрицательных чисел

Получение элемента списка по его номеру

Предикат имеет арность три: первый аргумент — исходный список, второй аргумент — номер элемента и третий — элемент списка, имеющий заданный номер.

Правила для этой процедуры: отбрасываем по одному элементу с начала списка и отнимаем от N по 1 до тех пор, пока не дойдем до 1, значит этот элемент (голова списка) – искомый.

Рис. 4.11. Программа получения элемента по его порядковому номеру

Практикум 4-9

Создайте предикат, возвращающий по списку и двум числам N и M подсписок исходного списка длиной M, состоящий из элементов с номерами от N до N+M.

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

Разработаем предикат, позволяющий "обратить" список (записать его элементы в обратном порядке). Предикат будет иметь два аргумента: первый — исходный список, второй — результат.

Для того чтобы получить "перевернутый" список, можно "перевернуть" его хвост и добавить в конец первый элемент исходного списка.

Рис. 4.12. Программа записи элементов списка в обратном порядке

Можно написать данный предикат без использования предиката conc. В этом случае нужно добавить дополнительный аргумент, в котором будет "накапливаться" результат. От исходного списка берется по элементу (голова) и дописывается к вспомогательному списку. Когда исходный список будет исчерпан, "накопленный" список передается в третий аргумент в качестве ответа. До этого момента третий аргумент остается от шага к шагу неконкретизированным. Реализация этой процедуры будет выглядеть следующим образом:

Рис. 4.13. Хвостовая рекурсия для записи элементов списка в обратном порядке