Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1- 4_Функциональное программирование_4

.doc
Скачиваний:
24
Добавлен:
23.06.2014
Размер:
25.09 Кб
Скачать

Функциональное программирование.

Контрольная работа № 1.

варианта: 4

Задание №1. Напишите функцию, осуществляющую циклическую перестановку элементов в списке, т.е. (f g h j) -> (g h j f).

Решение: Так как сказано, что рекурсия в первой задаче не требуется, то функцию перестановка будет выполнятся один раз за один вызов функции, т.к. неизвестно, сколько элементов будет в списке.

Функция APPEND используется вместо CONS потому что APPEND сливает списки вместе как один список, а CONS возвращает список только из двух элементов – головы и хвоста.

Функция LIST используется из-за того, что функция FIRST при слитии списка (APPEND) возвращает значение в виде точки и элемента – откуда берется эта точка я так и не понял. Поэтому функцию LIST я использую для того, чтобы убрать эту точку.

Текст программы:

(defun g (s)

(append (rest s) (list (first s))) ;Перестановка

)

Задание №2. Напишите функцию, которая из данного списка строит список списков его элементов, например, (a b) -> ((a) (b)).

Решение:

(defun list1 (s)

(if (null s) nil ;проверка наличия элементов в списке

;построение списка списков его элементов

(cons (list (first s)) (list1 (rest s)))

)

)

Задание №3. Определите функцию, зависящую от двух аргументов u и v, являющихся списками, которая вычисляет список всех элементов u, не содержащихся в v.

Решение:

(defun iskl (u v)

(cond ((null u) nil) ;проверка наличия элементов в списке

;проверка наличия первого элемента списка u в списке v

;если элемент найден, то проверяется следующий элемент

((member (first u) v) (iskl (rest u) v))

;первый элемент списка u в списке v не найден

;поэтому «заносим» его в список, возвращаемый функцией

(t (cons (first u) (iskl (rest u) v)))

)

)