Контрольная работа по «Логическое и функциональное программирование»
Контрольная работа, 02 Февраля 2015, автор: пользователь скрыл имя
Описание работы
Написать программу формирования списка, состоящего из атомов самого низкого уровня для заданного списка.
Файлы: 1 файл
кр по функц прогр.doc
— 88.00 Кб (Скачать файл)Министерство Образования Российской Федерации
Ивановский государственный энергетический университет имени В.И. Ленина
Кафедра программного обеспечения компьютерных систем
Контрольная работа
по дисциплине «Логическое и функциональное программирование»
Вариант №3.
Выполнил: студент гр. 4-80к
Лебедев Дмитрий Викторович
Шифр 911143к
Проверил: Зубков В.П.
Иваново, 2015
Оглавление
Задание
Написать программу формирования списка, состоящего из атомов самого низкого уровня для заданного списка.
Код программы
(defun max-deep (lst &optional (lv 0))
(cond ((null lst) lv)
((listp (car lst)) (max (max-deep (car lst) (+ 1 lv)) (max-deep (cdr lst) lv)))
(t (max-deep (cdr lst) lv))))
(defun p1 (L &optional (n (max-deep L)))
(let ((Rez ()))
(dolist (x L Rez)
(if (and (atom x) (= n 0)) (setq Rez (append Rez (cons x ())))
(if (and (listp x) (> n 0)) (setq Rez (append Rez (p1 x (- n 1)))) nil)))))
(defun task(lis (lm (max-deep(lis))))
(p1 (lis)))
Описание процедур
Исходный список является списком нулевого уровня – это самый высокий уровень. Список, который не содержит других списков, называется списком самого низкого уровня. Его уровень больше 0. Это список самого низшего уровня. Не включены в список-результат атомы, находящиеся в «физическом» смысле на "самом высоком" и "самом низком" уровнях. Если на «промежуточных» уровнях есть такие же атомы, то они присутствуют в списке-результате.
Максимальная глубина списка:
(defun max-deep (lst &optional (lv 0))
(cond ((null lst) lv)
((listp (car lst)) (max (max-deep (car lst) (+ 1 lv)) (max-deep (cdr lst) lv)))
(t (max-deep (cdr lst) lv))))
Получение атомов:
(defun p1 (L &optional (n (max-deep L)))
(let ((Rez ()))
(dolist (x L Rez)
(if (and (atom x) (= n 0)) (setq Rez (append Rez (cons x ())))
(if (and (listp x) (> n 0)) (setq Rez (append Rez (p1 x (- n 1)))) nil)))))
Решение:
(defun task(lis (lm (max-deep(lis))))
(p1 (lis)))
Результат работы программы
Рисунок 1.0.1 Загрузка программы
Рисунок 1.0.2 Выполнение
Выполнение (p1 '(1 2 3 (4 5 6) (7 8 9) ((a b)) (((4)))))