Сборник задач по логическому программированию для студентов специальности «030100 информатика»




НазваниеСборник задач по логическому программированию для студентов специальности «030100 информатика»
страница7/11
Дата публикации08.07.2013
Размер0.73 Mb.
ТипСборник задач
skachate.ru > Информатика > Сборник задач
1   2   3   4   5   6   7   8   9   10   11
^

Лабораторная работа №4. Применение рекурсии для обработки списков


Пример 1. Определить количество элементов в списке.

Количество элементов пустого списка равно 0, в противном случае, нужно определить количество элементов в хвосте и найденное значение увеличить на единицу.
Программа 18. Определение длины списка

Domains

list = integer*

Predicates

length_of(list, integer)

Clauses

length_of([], 0):-!.

length_of([_|T], N) :- length_of(T, N1),N = N1 + 1.
?- length ([2, 12, 45]), X).

Ответ: Х=3.

Пример 2. Найти сумму элементов в списке.

Сумма элементов пустого списка равна 0, сумма элементов непустого списка определяется сложением головы списка с суммой элементов хвоста.

sum ([], 0):-!.

sum ([H|T], S) :- sum (T, S1), S = S1+H.

?-sum ([2, 12, 45]), X).

Ответ: Х=59

Пример 3. Определить принадлежность элемента списку.

Программа 19. Определение принадлежности элемента списку

Domains

type=integer

list=type*

Predicates

member(type,list)

Clauses

member(H,[H|_]):-!.

member(H,[_|T]):-member(H,T).
Запрос:

member (4,[1,3,4,9]).

Ответ: Yes.

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

Пример 4. Объединить два списка.

Эту задачу можно описать с помощью следующих предикатов:

а) если к пустому списку [] добавить список Р, то в результате получится Р;

б) чтобы добавить список Р к концу списка [X|Y], нужно Р добавить к хвосту Y и затем присоединить к голове Х, при этом получа­ется список [Х|Т].

Программа 20. Объединение двух списков

Domains

type=integer

list=type*

Predicates

append(list,list,list)

Clauses

append([],L,L):-!.

append([H|T],P,[H|Y]):-append(T,P,Y).
? append ([3, 5, 7], [12,5],K).

Ответ: К=[3,5,7,12,5]

Процедуру append можно использовать:

  1. для разбиения списка на подсписки:

? append (X,Y,[1,2])

Ответ: X=[ ]Y=[l,2]

X=[l] Y=[2]

X=[l,2] Y=[]

  1. Для вывода последнего элемента списка:

last(X,L):-append(_,[X],L)

Пример 5. Удаление элементов из списка.

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

Программа 21. Удаление элементов из списка

Domains

type=integer

list=type*

Predicates

delete(type,list,list)

Clauses

delete(X,[X|T],T):-!.

delete(X,[Y|T],[Y|T1]):-delete(X,T,T1).

Смысл: результат удаления произвольного элемента из пустого списка, есть пустой список, если удаляемый элемент совпадает с головой списка, то результатом программы является хвост списка, иначе удаление производится из хвоста списка.

Данная программа удаляет первое вхождение элемента в список. Знак отсечения "!" в конце правила предотвращает последующий поиск и вывод лишних вариантов ответов после выполнения ограничительного факта.

Для удаления всех вхождений элемента Х программу надо дополнить:

delete(_, [], []) :-!.

delete(X, [X | T], W) :- delete(X, T, W),!.

delete(X, [Y | T], [Y|W]) :- delete(X, T, W) .

Смысл программы таков: пока список не пуст, удалить элемент, если он совпадает с головой списка, а затем удалять его из хвоста, иначе надо сразу удалять элемент из хвоста.

Пример 6. Индексация элементов списка.

Определить номер элемента X.

nomer([X |_], 1, X):-!.

nomer ([_| T], N, X) :- nomer(T, N1, X), N=N1+1.

Пример 7. Вывести максимальный элемент.

max ( [X] , X) .

max ([X | T], X) :- max (T, M), X>M, !.

max ( [_| T] , M) :- max (T, M) .

Смысл программы: если в списке один элемент - он и является максимальным, если более одного, то это голова списка, если она больше максимального элемента хвоста, или максимальный элемент хвоста.

Пример 8. Обращение списка.

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

reverse([X], [X]):-!.

reverse ([X | T], Z) :- reverse (T, W), append(W, [X], Z).

Пример 9. Иногда бывает полезно представить в виде списка информацию, содержащуюся в известных фактах. В Прологе для этой цели служит предикат findall. Полный формат предиката: findall(Переменная, Атом, Список), здесь Атом- отношения, которое определяет список элементов, конкретизирующих переменную в качестве аргумента предиката атом. Рассмотрим предикат на примере вычисления общей суммы окладов служащих

Прорамма 22. Сумма окладов служащих

Domains

i=integer

sp=i*

fam,im,dolgnost=symbol

Predicates

sum(sp,i)

go

spisok(fam,im,dolgnost,i)

Clauses

sum([],0):-!.

sum([H|T],S):-sum(T,S1),S=S1+H.

spisok(ivanov, ivan, slesar,400).

spisok(petrov, petr,tokar,200).

spisok(sidorov, denis,plotnik,100).

go:-findall(X,spisok(_,_,_,X),L), sum(L,A).
Задания для самостоятельной работы

  1. Определите количество элементов в списке.

  2. Определите сумму элементов списка

  3. Определите количество нечетных элементов в списке.

  4. Определите, принадлежит ли заданный элемент списку.

  5. Определите, сколько раз заданный элемент входит в список.

  6. Выведите максимальный элемент.

  7. Выведите голову списка.

  8. Выведите последний элемент.

  9. Замените голову списка.

  10. Определите номер элемента X.

  11. Выведите элемент под номером N.

  12. Удалите из списка все вхождения заданного элемента.

  13. Объедините два списка.

  14. Перепишите список в обратном порядке.

  15. Объедините два списка без дублирования элементов.

  16. Удалите первое вхождение заданного элемента.

  17. Сложить поэлементно 2 списка.

  18. Сложить два списка следующим образом: a1+bn, a2+bn-1, ...,an-1+b2, an+b1.

  19. Найти количество элементов, предшествующих первому(последнему) максимальному.

  20. Переместите голову списка в конец списка.

  21. Найти сумму максимального и минимального элементов списка.

  22. Поменяйте местами элементы с нечетными индексами с элементами с четными индексами.

  23. Составить список из цифр заданного числа в обратном порядке. Например, 127645: [5,4,6,7,2,1].

  24. Выполните N последовательных перестановок головы в конец списка.

  25. Увеличьте каждый элемент списка на заданный элемент.

  26. Увеличьте элемент с заданным номером на заданное число.

  27. Все вхождения заданного элемента уменьшите на заданное число.

  28. Удалите элемент с заданным номером N.

  29. Создать список, элементами которого являются 2n, n!, члены последовательности Фибоначчи.

  30. Определите среднее элементов списка.

  31. Замените четные элементы списка нулем.

  32. Определите сумму элементов, больше заданного N.

  33. Отсортируйте список методом пузырька.

  34. Отсортируйте список методом вставками.

  35. Отсортируйте список быстрым методом сортировки.

  36. Используя предикат findall, решите следующие задачи:

    1. Вывести самых молодых жильцов дома и номера квартир, в которых они живут.

    2. Вывести фамилии студентов и их возраст с максимальным размером стипендии.

    3. Вывести фамилии сотрудников предприятия и их оклады, оклады которых меньше среднего.

    4. Вывести студентов с заданной фамилией и посчитать их количество.


Рекомендуемая литература

  1. Ин Ц., Соломон Д. Использование Турбо-Пролога: Пер. с англ.-М.:Мир, 1993.-608 с.,ил.

  2. Практикум по логическому программированию: Методические рекомендации для студентов и преподавателей по лабораторному практикуму по курсу «Логическое программирование»/ Сост. Р.И. Баженов, И.И. Раскина. – Омск: Изд-во ОГПУ, 1995. – 85 с.

1   2   3   4   5   6   7   8   9   10   11

Похожие:

Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconРуденко Т. В. Сборник задач и упражнений по языку Си. ( учебное пособие для студентов II курса )
Представлены задачи и упражнения по языку Си и программированию на нем. Рассматриваемая версия Си соответствует международному и...
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconСборник Задач по гидравлике Учебное пособие для студентов-заочников
Бровченко П. Н., Прохасько Л. С., Кузьмина Н. Д. Сборник задач по гидравлике: Учебное пособие для студентов-заочников. – Челябинск:...
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconМетодические указания по курсовому проектированию для студентов очной...
Составлены в соответствии с рабочей программой курсов “Проектирование информационных систем” для студентов специальности 230100-...
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconМетодические указания по выполнению дипломной работы для студентов...
Ргтэу по специальности «Прикладная информатика ( в экономике)» и устанавливают требования к ее тематике, содержанию, объему, результатам...
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconРабочая программа по дисциплине «экономическая информатика» для студентов...
Задание и методические указания к контрольной работе для студентов заочного отделения
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconИнформатика Лабораторные работы для студентов специальности аэп заочного отделения (2 семестр)
Приведены методические указания по выполнению лабораторных работ по дисциплине "Информатика", изучаемой во 2 семестре
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconМетодические указания предназначены для студентов специальности 351400...
Методические указания предназначены для студентов специальности 351400 «Прикладная информатика в экономике» очной и заочной формы...
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconСборник задач по физике пласта практикум для студентов направления...
С23 Сборник задач по физике пласта: практикум по дисциплине «Физика пласта» для студентов направления «Прикладная геология» и направления...
Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconСборник задач по финансовому менеджменту для специальности 080502...

Сборник задач по логическому программированию для студентов специальности «030100 информатика» iconМетодические указания к выполнению контрольной работы для студентов...
Теория экономических информационных систем : методические указания к выполнению контрольной работы для студентов заочного отделения...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2014
контакты
skachate.ru
Главная страница