МІНІСТЕРСТВО ОСВІТИ І НАУКИ РЕСПУБЛІКИ БІЛОРУСЬ
Білоруський національний технічний університет
Факультет інформаційних технологій і робототехніки
Кафедра програмного забезпечення обчислювальної техніки і автоматизованих систем
Звіт з лабораторної роботи № 6
з дисципліни: Функціональне та логічне програмування
на тему: робота зі списком.
Виконали: студенти групи 02213 Маліч К.В. Шарко А.В.
Прийняла: ст.пр. Ковалькова І.А.
Мінськ +2014
Завдання
Мета роботи: придбання навичок роботи зі списками в програмах на Visual Prolog.
Зі списку L1 отримати список L2, черговий елемент якого дорівнює середньому арифметичному черговий трійки елементів списку L1. Якщо число елементів списку L1 не кратне 3, то останній елемент списку L2 виходить розподілом на 3 одного або суми двох останніх елементів списку L1. Список L1 вводиться за підказкою з екрану. В результаті виконання програми повинні видаватися вихідний L1 і результуючий L2 списки.
Видалити всі входження заданого елемента в списку.
Б Провести зрушення елементів списку (Не циклічний):
на N позицій вліво (вправо).
Визначити різницю між максимальним і мінімальним елементами списку.
Видалити перше входження заданого елемента в списку.
Обчислити суму елементів, що стоять у списку на непарних місцях, і суму елементів, що стоять на парних місцях.
Замінити в списку всі елементи зі значенням X на значення Y.
Код програми
=real*read_list(integer,list)nov_spisok(integer,list,list)result_list(0,[])._list(N,[H|T]):-readreal(H),N1 =N - 1, read_list (N1, T) ._ spisok (0, [], []): -! ._ Spisok (1, [H | T], [H1 | T1]): - H1=H/3, nov_spisok (0, T, T1) ._ spisok (2, [H | [H1 | T]], [H2 | T1]): - H2=(H1 + H)/2, nov_spisok (0, T, T1). _spisok (N, [H | [H1 | [H2 | T]]], [H3 | T3]): - H3=(H + H1 + H2)/3,=N - 3, nov_spisok (N1, T, T3 ).: - write ( Vvedite chislo elementov massiva: ), readint (N), nl, ( Vvedite elementi massiva: ), nl, read_list (N, H), nov_spisok (N, H, H1), nl, ( Noviy spisok: ), write (H1), nl.result.
/* domains=real * read_list (integer, list) resultchg (list, real, list) _list (0, []) ._ list (N, [H | T]): - readreal ( H), N1=N - 1, read_list (N1, T). ([], _, []) if!. ([H | T], H, T1) if chg (T, H, T1) ,!. ([H | T], S, [H | T1]) if chg (T, S, T1),!.: - write ( Введіть число елементів списку ), nl, write ( N= raquo ;), readint (N), nl, ( Вводите елементи списку ), nl, read_list (N, L), write ( Вихідний список L=), (L), nl, nl, write ( Введіть шуканий елемент ), nl, readreal (E), nl, chg (L, E, LL), write ( результуючий список: ), nl, write (LL), nl .. */
/* domains=real * read_list (integer, list) resultdel (real, list, list) _list (0, []) ._ list (N, [H | T]): - readreal ( H), N1=N - 1, read_list (N1, T). (X, [X | T], T). (X, [Y | T], [Y | T1]) if del (X, T, T1).: - write ( Введіть число елементів списку ), nl, write ( N=), readint (N), nl, ( Вводите елементи списку ), nl, read_list (N, L), write ( Вихідний список L=), (L), nl, nl, write ( Введіть шуканий елемент ), nl, readreal (E), nl, del (E, L, LL) , write ( результуючий список L=), write (LL), nl .. * /=integer * .summ_nechet (list, integer, integer) summ_chet (list, integer, integer) readlist (list) _nechet ([ ], _, 0): -! ._ nechet ([H | T], I, R): - mod 2=0,!, II=I + 1, summ_nechet (T, II, TR), R=TR + H;=I + 1, summ_nechet (T, II, R) ._ chet ([], _, 0): -! ._ chet ([H | T], I, R): - mod 2=1,!, II=I + 1, summ_chet (T, II, TR), R=TR + H;=I + 1, summ_chet (T, II, R). ([H | T]): - readint (H) ,! , readlist (T). readlist ([]). ( Vvodite elementi spiska ), nl, (L), ( Summa chetnih: ), nl, _chet (L, 0, S).*/=integer*(integer,ilist,ilist)._last(ilist,ilist)._last(ilist,ilist).(ilist,integer,ilist).(ilist)._last([_],[]):-!._last([H|Tail],[H|NewTail]):-del_last(Tail,NewTail)._last([],[0]):-!._last([H|Tail],[H|NewTail]):-add_last(Tail,NewTail).(0,L,L):-!.(N,T,L):-del_last(T,T1),N1=N- 1, pravo (N1, [0 | T1], L). (A, N, B): - pravo (0, A, A1), pravo (N, A1, B). ([H | T]):-readint (H),!, readlist (T). readlist ([]). ( Vvod N ), (N), ( Введіть елементи (кінець введення - подвійне натискання на ENTER): raquo;),nl,(L),(L,N,B).*/=real*readlist(list).max(list,integer).min(list,integer).res(integer,integer,integer).([X], X). ([H | Tail], H) if max (Tail, M), H gt; M,!. ([_ | Tail...