- •3 Лабораторная работа №2 (программирование разветвлённых алгоритмов) 12
- •4 Лабораторная работа №3 (программирование простых циклических алгоритмов) 16
- •7 Решение индивидуального задания 28
- •Постановка задачи
- •Лабораторная работа №1 (программирование линейных алгоритмов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №2 (программирование разветвлённых алгоритмов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №3 (программирование простых циклических алгоритмов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №4 (программирование с использованием одномерных массивов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Лабораторная работа №5 (программирование с использованием многомерных массивов)
- •Реализация на языке lisp
- •Реализация на языке Prolog
- •Решение индивидуального задания
- •Реализация на языке lisp
- •Функция podspvsp
- •Функция evropa
- •Функция opa
- •7.1.5 Функция v1spisok
- •7.1.6 Функция get1
- •7.1.7 Функция get22
- •7.1.8 Функция getpolug
- •7.1.9 Функция 1polniz
- •7.1.10 Функция 2polniz
- •7.1.11 Функция 2polverh
- •7.1.12 Функция 1polverh
- •7.1.13 Функция getdiag
- •7.1.14 Функция getdown
- •7.1.15 Функция getup
- •Функция 1hlpod
- •Функция 2hlpod
- •7.1.18 Функция revpod
- •7.1.19 Функция deletefirst
- •7.1.20 Функция get1half
- •7.1.21 Функция get2half
- •7.1.22 Функция neto
- •7.1.23 Функция dl
- •7.1.24 Функция revers
- •7.1.25 Функция gl
- •7.1.26 Полный текст программы
- •Реализация на языке Prolog
- •Функция ygolki
- •Функция app
- •Функция main
- •7.2.4 Функция opp
- •7.2.5 Функция verhyg
- •7.2.6 Функция nizyg
- •7.2.7 Функция diag
- •Функция fpolpodsp
- •Функция npolpodsp
- •7.2.10 Функция reveverspodsp
- •7.2.11 Функция delall
- •7.2.12 Функция fpol
- •7.2.13 Функция npoll
- •7.2.14 Функция npol
- •7.2.15 Функция dl
- •7.2.16 Функция revers
- •7.2.17 Функция getlalst
- •7.2.18 Полный текст программы
7.2.17 Функция getlalst
7.2.17.1 Спецификация
Функция должна возвращать последний элемент списка или последний список, если у нас список списков.
-
Структура входных данных
Структурой входных данных в данной функции является список чисел или списков чисел. Примеры записи на языке prolog приведены на рисунке 7.125.
[[3, 4],[2, 1]] [1, 2, 3, 4, 5] |
Рисунок 7.125
-
Структура выходных данных
Структурой выходных данных в данной функции является список списков чисел или просто список чисел. Примеры записи на языке LISP приведены на рисунке 7.126.
[[1, 7, 9],[3, 4],[1]] [1, 2, 3, 4, 5] |
Рисунок 7.126
-
Функциональные тесты
Функциональные тесты для функции getlast приведены в таблице 7.42.
Таблица 7.42
Проверяемая ситуация |
Вызов функции со входным значением |
Предполагаемый результат |
Пустой список |
Getlast([],Rez) |
[] |
Список списков |
getlast ([[7, 1, 5],[4, 6, 2], [9, 3. 8]],Rez)
|
[[9, 3, 8],[4, 6,2],[7, 1, 5]]
|
Один список |
getlast ([1, 2, 3, 4],Rez) |
[4, 3, 2, 1] |
-
Словесное описание результата применения функции
Функция должна выдать последний элемент списка.
-
Текст программы
Текст программы представлен на рисунке 7.127.
getlast([H|T],R):- getlast(T,R). getlast([X],X). |
Рисунок 7.127
7.2.18 Полный текст программы
Полный текст программы представлен на рисунке 7.128-7.131.
domains os=integer* oos=os* predicates revers(os, os) revers(oos,oos) opp(os,os,os) opp(oos,oos,oos) app(oos,os) dl(os,os) dl(oos,oos) getlast(os, integer) getlast(oos,os) reverspodsp(oos,oos) delallfirst(oos,oos) fpol(os,os) fpol(oos,oos) npol(os,os) npol(oos,oos) npoll(os,os) npoll(oos,oos) fpolpodsp(oos,oos) npolpodsp(oos,oos) diag(oos,os) nizyg(oos,oos) verhyg(oos,oos) dlall(oos,oos) main(oos,oos,oos) ygolki(oos,os) clauses /*dva spiska v odin*/ opp([H|T], Y, [H|TZ]):-opp(T, Y, TZ). opp([],Y,Y). /*spiski v spisok*/ app([H|T],Rez):-app(T,RezT), opp(H,RezT,Rez). app([],[]). /*vozvrat poslednego alta*/ getlast([H|T],R):- getlast(T,R). getlast([X],X). |
Рисунок 7.128
/*ydalenie poslednego aleventa*/ dl([H|T], RLST):- dl(T, RLSTT),RLST = [H|RLSTT]. dl([X],[]). /*ydalenie poslednego alta iz vceh podsp*/ dlall([[H|T1]|T],[R|Rez]):-T1=[_|_], dl([H|T1],R), dlall(T,Rez). dlall([[H|T1]|T],[]):-T1=[]. dlall([[]|T],[]). dlall([],[]). /*funkcia revers*/ revers(T,[H|Rez]):-getlast(T,H), dl(T,AR), revers(AR,Rez). revers([],[]).
/*fynkcia revers dla podsp*/ reverspodsp([H|T],[R|Rez]):-revers(H,R), reverspodsp(T,Rez). reverspodsp([],[]). /*ydalenie pervogo alementa ith podsp*/ delallfirst([[H1|T1]|T],[T1|Rez]):-T1=[_|_], delallfirst(T,Rez). delallfirst([[H]|T],[]). delallfirst([[]|T],[]). delallfirst([],[]). /*1bolcha pol*/ fpol([H|T],[H|Rez]):-dl(T,ZT), fpol(ZT,Rez). fpol([H],[H]). fpol([],[]). /*2polovina min*/ npol([H|T],[R|Rez]):-getlast(T,R), dl(T,ZT), npol(ZT,Rez). npol([H],[]). npol([],[]).
npoll(T,Rez):-npol(T,H), revers(H,Rez). /*1polovina iz podsp*/ fpolpodsp([H|T],[]):-H=[]. |
Рисунок 7.129
fpolpodsp([H|T],[R|Rez]):-H=[_|_], fpol(H,R), fpolpodsp(T,Rez).
fpolpodsp([],[]). /*2polovina iz podsp*/ npolpodsp([H|T],[R|Rez]):-H=[_|_], npoll(H,R), npolpodsp(T,Rez). npolpodsp([H|T],[]):-H=[]. npolpodsp([],[]). /*poluchenie gl diag*/ diag([[H|T1]|T],[H|Rez]):-T1=[_|_], delallfirst(T,ZT), diag(ZT,Rez). diag([[]|T],[]). diag([[H|[]]|T],[H]). diag([],[]). /*polychenie niz ygolkov*/ nizyg([H|T],[RA|Rez]):-fpolpodsp([H|T],AA), npolpodsp([H|T],RR), diag(AA,Ag), revers(Ag,A), reverspodsp(RR,Rg), diag(Rg,R), opp(R,A,RA), nizyg(T,Rez). nizyg([],[]). /*polychenie verh ygolkov*/ verhyg([H|T],[RA|Rez]):-delallfirst([H|T],Pac), dlall(Pac,Mac), Mac=[_|_], fpolpodsp(Mac,AA), npolpodsp(Mac,RR), diag(AA,Ag), revers(Ag,A), reverspodsp(RR,Rg), diag(Rg,R), opp(R,A,RA), verhyg(Mac,Rez). verhyg([H|T],[]):-delallfirst([H|T],Pac), dlall(Pac,Mac), Mac=[]. |
Рисунок 7.130
verhyg([],[]).
/*cortirovka*/ main([H|T],[E|R],[H|[E|Rez]]):-main(T,R,Rez). main([H|[]],[],[H]). main([],[],[]). /*cobctvenno vce*/ ygolki(T,Rez):-nizyg(T,D), verhyg(T,U), opp(U,D,UD), fpol(UD,POl1), npoll(UD,POL2), main(Pol1,Pol2,PodREZ), app(PodREZ,Rez).
goal %reverspodsp([[1,2,3,4],[1,2,3,4,5]],Rez). %delallfirst([[1],[2],[3]],Rez). %fpol([1,2,3,4,5],Rez). %npol([1,2,3,4,5,6],Rez). %fpolpodsp([],Rez). %npolpodsp([[1,2,5,3],[2,3,4],[5,23,45]],Rez). %diag([[1,2,3],[2,4,7],[1,3,7]],Rez). %nizyg([[9,10,11,12],[12,34,56,54],[12,34,56,54],[13,14,15,16]],Rez). %dlall([[5],[5],[5]],Rez). %verhyg([[10,2,1,7],[16,9,8,13],[6,15,14,13],[12,5,4,11]],Rez). %main([[1],[3]],[[2],[4]],Rez). %ygolki([[10,2,1,7],[16,9,8,13],[6,15,14,3],[12,5,4,11]],Rez). ygolki([[7,1,5],[4,6,2],[9,3,8]],Rez). %ygolki([[2,1],[4,3]],Rez). %ygolki([],Rez). %ygolki([[],[],[]],Rez). %ygolki([[1]],Rez). |
Рисунок 7.131