
- •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.1.25 Функция gl
7.1.25.1 Спецификация
Функция должна возвращать последний элемент списка или последний список, если у нас список списков.
-
Структура входных данных
Структурой входных данных в данной функции является список чисел или списков чисел. Примеры записи на языке LISP приведены на рисунке 7.71
((3 4) (2 1)) (1 2 3 4 5) |
Рисунок 7.71
-
Структура выходных данных
Структурой выходных данных в данной функции является список списков чисел или просто список чисел. Примеры записи на языке LISP приведены на рисунке 7.72.
((1 7 9)(3 4)(1)) (1 2 3 4 5) |
Рисунок 7.72
-
Функциональные тесты
Функциональные тесты для функции gl приведены в таблице 7.25.
Таблица 7.25
Проверяемая ситуация |
Вызов функции со входным значением |
Предполагаемый результат |
Пустой список |
(gl ‘()) |
nil |
Список списков |
(gl‘((7 1 5) (4 6 2)) (9 3 8)))
|
((9 3 8) (4 6 2)(7 1 5))
|
Один список |
(gl ‘(1 2 3 4)) |
(4 3 2 1) |
-
Словесное описание результата применения функции
Функция должна выдать последний элемент списка.
-
Текст программы
Текст программы представлен на рисунке 7.73.
(defun gl(lst) (cond ((null lst) nil) ((null(cdr lst))(car lst)) (t (gl(cdr lst))))) |
Рисунок 7.73.
7.1.26 Полный текст программы
Полный текст программы представлен на рисунке 7.74-7.77
; последний элт+++++++++++ (defun gl(lst) (cond ((null lst) nil) ((null(cdr lst))(car lst)) (t (gl(cdr lst)))))
;реверс ++++++++++++ (defun revers(lst) (cond ((null lst)nil) (t(cons(gl lst)(revers(dl lst))))))
;удаление последнего элемета ++++++++++++ (defun dl(lst) (cond ((null lst) nil) ((null (cdr lst)) nil) (t (cons (car lst) (dl (cdr lst)))))) ; 1 половина++++++++++++++++++++ (defun get1half(lst) (cond ((null lst)nil) (t(cons(car lst) (get1half(cdr(dl lst))))))) ; 2половина++++++++++++++++++++++++ (defun neto(lst) (cond ((null lst)nil) ((null (cdr lst))nil) (t (cons (gl lst) (neto(cdr(dl lst))))))) ;++++++++++++++++++++++++++++++++ (defun get2half (lst) |
Рисунок 7.74
(revers(neto lst))) ;сортировка ++++++++++++++++ (defun evropa(lst1 lst2) (cond ((null lst2)lst1) (t(cons(car lst1)(cons(car lst2)(evropa(cdr lst1)(cdr lst2)))))))
(defun opa(lst) (evropa (get1half lst) (get2half lst))) ;удаление последнего элемента во всех подсписках +++++++++++++++++++++== (defun deletefirst(lst) (cond ((NULL lst)nil) ((NULL (cdr (car lst)))nil) (t (cons (cdr (car lst)) (deletefirst (cdr lst)))))) ;получение гл диагонали ++++++++++++++= (defun getdiag(lst) (cond ((null lst)nil) (t (cons(car(car lst))(getdiag(deletefirst (cdr lst)))))))
;получение нижних диагоналей +++++++++++++++++ (defun getdown (lst) (cond ((null lst)nil) (t (cons (getdiag lst)(getdown(cdr lst)))))) ;получение верхних диагоналей +++++++++++++++++++++ (defun getup(lst) (cond ((null lst)nil) ((null(cdr(car lst)))nil) (t(cons (getdiag(deletefirst lst))(getup(deletefirst lst)))))) ;первая половина подсписков ++++++++++++++++ (defun 1hlpod(lst) (cond ((null lst)nil) (t (cons (get1half(car lst)) (1hlpod (cdr lst)))))) ;реверс подсписков ++++++++++++++++ (defun revpod(lst) (cond ((null lst)nil) (t (cons (revers(car lst)) (revpod (cdr lst)))))) |
Рисунок 7.75
;вторая половина подсписков ++++++++++++++ (defun 2hlpod(lst) (cond ((null lst)nil) (t(cons (get2half(car lst))(2hlpod (cdr lst))))))
;получение половин уголков+++++++++++++ (defun 1polniz(lst) (getdown(1hlpod lst))) ; +++++++++++++++++++ (defun 1polverh(lst) (getup(1hlpod lst))) ; ++++++++++++++ (defun 2polniz (lst) (getdown(revpod (2hlpod lst)))) ; +++++++++++ (defun 2polverh (lst) (getup(revpod(2hlpod lst))))
;два списка в один ++++++++++ (defun v1spisok(lst1 lst2) (cond ((Null lst1)lst2) (T(cons(car lst1) (v1spisok(cdr lst1) lst2))))) ;объединение списков в список +++++++++++++ (defun podspvsp(lst) (cond ((null lst)lst) (t(v1spisok(car lst) (podspvsp(cdr lst)))))) ;++++++++++++ (defun getpolug (lst lst1 ) (cond ((null lst)lst1) (t (cons (v1spisok (car lst) (car lst1))(getpolug (cdr lst) (cdr lst1)))))) ; получение нижних уголков++++++++++++++ (defun get22(lst) (getpolug (2polniz lst) (revpod(1polniz lst)))) ; получение верхних уголков++++++++++ (defun get11(lst) (getpolug (2polverh lst) (revpod(1polverh lst))))
|
Рисунок 7.76
;готово +++++++++++ (defun baba (lst) (podspvsp(opa(v1spisok(get11 lst) (get22 lst))))) |
Рисунок 7.77