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

Prolog. Работа со списками

Категория:

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

Дисциплина:

Функциональное и логическое программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Стоимость работы:

6 руб.

Оценка: 10
Объем страниц: 6
Год сдачи: 2021
Дата публикации: 09.06.2021

Фрагменты для ознакомления

Отчет по лабораторной работе № 6

дисциплина: «Функциональное и логическое программирование»

РАБОТА СО СПИСКАМИ

Цель работы: приобретение навыков работы со списками в программах на Visual Prolog.

Задание:

Из списка L1 получить список L2, очередной элемент которого равен среднему арифметическому очередной тройки элементов списка L1.  Если число элементов списка L1 не кратно 3, то последний элемент списка L2 получается делением на 3 одного или суммы двух последних элементов списка L1.  Список L1 вводится по подсказке с экрана. В результате выполнения программы должны выдаваться исходный L1 и результирующий L2 списки.

Код программы:

domains 
list=real*                                
predicates
nondeterm read_list(integer,list)
nondeterm new_list(list,list)
nondeterm result
clauses
read_list(0,[]).
read_list(N,[Г|Хв]):-
            readreal(Г),
            N1=N-1,
            read_list(N1,Хв).
new_list([],[]).
new_list([СпЭл1],[СпЭл2]) :-
            СпЭл2 = СПЭл1/3 ...   

Скриншоты результатов:

Скриншоты результатов

Задание:

4.7. Определить среднее арифметическое элементов списка.

 Код программы:                               

 Скриншоты результатов:

Определить среднее арифметическое элементов списка

Задание:

4.9. Произвести циклический сдвиг элементов списка вправо на N позиций:

 Код программы:

 Скриншоты результатов:

Произвести циклический сдвиг элементов списка вправо на N позиций

Задание:

4.20. Удалить конец списка после заданного элемента X.

 Код программы:

 Скриншоты результатов:

Удалить конец списка после заданного элемента X

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

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

Список — это специальный вид сложного терма, состоящий из последовательности термов, заключенных в квадратные скобки и разделенных запятой. Как обозначается отсечение в программе?

 

2. Голова и хвост списка. Изображение списка в виде головы и хвоста.

Н – голова, Т – хвост списка. Изображается в виде [H|T]. H- первый элемент, Т – список оставшийся

 

3. Как обозначается пустой список?

[].

 

4. Можно ли изобразить пустой список в виде головы и хвоста?

Нет.

 

5. Что означают следующие виды изображения списка: L, [X], [ _ , A], [ _ |T], [H| _ ], [ _ ], [ _ ,B|C]?

L – тип списка; [X] – список состоящий из одного элемента; [_,A] – список из двух элементов, первый элемент может принимать любое значение; [ _ |T], - список в котором голова принимает любое значение; [H| _ ] – список в котором не важен хвост; [_] – список из одного элемента значение которого не имеет значения;              [ _ ,B|C]  - список в голове которого 2 элемента, и первый может принимать любое значение.

 

6. Может ли быть в голове списка более одного элемента?

7. Принадлежит ли элемент 5 списку [[1, 2, 3], [4, 5, 6]]?

8. Сопоставимы ли два списка: [5, 6, 7] и [H|T]?

9. Можно ли в процедурах ввода списка ввод_списка1 и ввод_списка2 поменять местами первое и второе предложения?

10. Как нужно изменить процедуру удал_перв_эл, чтобы можно было удалить из списка: a) два первых элемента; б) второй элемент?

11. Как нужно изменить процедуру удал_посл_эл, чтобы из списка были удалены: a) два         последние элементы; б) предпоследний элемент? 

12. Как нужно изменить процедуру выдел_перв_эл, чтобы можно было выделить из списка: a) два первых элемента; б) второй элемент?

13. Как нужно изменить процедуру выдел_посл_эл, чтобы из списка можно было выделить: a) два последние элементы; б) предпоследний элемент?

14. Как нужно изменить процедуру доб_эл_в_начало, чтобы можно было вставить заданный элемент между первым и вторым элементами списка?

15. Как нужно изменить процедуру доб_эл_в_конец, чтобы заданный элемент вставился перед последним элементом списка?

16. Можно ли в программе со списками обойтись без раздела domains?

Вывод: приобрёл практические навыки при работе со списками в программах на Visual Prolog.

43