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

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

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

Номер варианта (42*7) div 100=3.

ЗАДАНИЕ.

1.Напишите с помощью композиции условных выражений функции от четырех аргументов (and4 x1 x2 x3 x4) и (or4 x1 x2 x3 x4), совпадающие со встроенными функциями and и or от четырех аргументов.

2.Напишите функцию, вычисляющую последний элемент списка.

3.Напишите функцию от двух аргументов x и n, которая создает список из n раз повторенных элементов x.

РЕШЕНИЕ.

1. В функцию and4 передается 4 параметра, которые сравниваются между собой, если они все равны t, тогда печатается символ t, в противном случае nil. При вводе всех значений nil печатается nil, при вводе хотя бы одного nil также печатается nil, t печатается только тогда, когда все входные переменные равны t.

В функцию or4 передается 4 параметра, которые сравниваются с t, если хотя бы один из параметров не равен nil, тогда печатается t, если же все переменные равна nil, тогда печатается nil.

(defun and4(x1 x2 x3 x4)

(if (eql x1 t) (if (eql x2 t) (if (eql x3 t) (if (eql x4 t)t nil)nil)nil)nil)

)

(defun or4(x1 x2 x3 x4)

(cond ((eql x1 t) t)

((eql x2 t) t)

((eql x3 t) t)

((eql x4 t) t)

(t nil))

)

2. Входящее значение проверяется на пустое значение и в противном случае выполняется следующее условие, если хвост списка равен нулю тогда печатается голова, если не хвост имеется, то он передается в качестве параметра опять в функцию, пока не будет достигнут конец списка.

(defun en(x)

(if (null x)nil (if (null (rest x))(list x) (en (rest x))))

)

3. Входящее значение n проверяется на наличие нулю и в противном случае выполняется рекурсивный вызов функции f с уменьшением значения n на единицу. В результате строится список из n раз повторенных элементов х

(defun f(x n)

(if (= n 0)nil (cons x (f x (1- n))))

)