Автор работы: Пользователь скрыл имя, 02 Февраля 2015 в 22:17, контрольная работа
Написать программу формирования списка, состоящего из атомов самого низкого уровня для заданного списка.
Министерство Образования Российской Федерации
Ивановский государственный энергетический университет имени В.И. Ленина
Кафедра программного обеспечения компьютерных систем
Контрольная работа
по дисциплине «Логическое и функциональное программирование»
Вариант №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)))))
Информация о работе Контрольная работа по «Логическое и функциональное программирование»