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

7.1.25 Функция gl

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

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

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

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

((3 4) (2 1))

(1 2 3 4 5)

Рисунок 7.71

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

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

((1 7 9)(3 4)(1))

(1 2 3 4 5)

Рисунок 7.72

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

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

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

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

        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

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