Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_LISP_Prolog.docx
Скачиваний:
13
Добавлен:
12.04.2015
Размер:
4.54 Mб
Скачать

7.2.17 Функция getlalst

7.2.17.1 Спецификация

Функция должна возвращать последний элемент списка или последний список, если у нас список списков.

        1. Структура входных данных

Структурой входных данных в данной функции является список чисел или списков чисел. Примеры записи на языке prolog приведены на рисунке 7.125.

[[3, 4],[2, 1]]

[1, 2, 3, 4, 5]

Рисунок 7.125

        1. Структура выходных данных

Структурой выходных данных в данной функции является список списков чисел или просто список чисел. Примеры записи на языке LISP приведены на рисунке 7.126.

[[1, 7, 9],[3, 4],[1]]

[1, 2, 3, 4, 5]

Рисунок 7.126

        1. Функциональные тесты

Функциональные тесты для функции 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]

        1. Словесное описание результата применения функции

Функция должна выдать последний элемент списка.

        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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]