Контрольная работа по «Логическое и функциональное программирование»

Автор работы: Пользователь скрыл имя, 02 Февраля 2015 в 22:17, контрольная работа

Описание работы

Написать программу формирования списка, состоящего из атомов самого низкого уровня для заданного списка.

Файлы: 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)))))

 

 


Информация о работе Контрольная работа по «Логическое и функциональное программирование»