Контрольные работы индивидуально, без посредников
http://*****
ICQ:
Mail: *****@***ru
Mob.:
Министерство образования Российской Федерации
Томский государственный университет
систем управления и радиоэлектроники
Кафедра автоматизированных систем управления (АСУ)
Функциональное программирование
Контрольная работа
Выполнил:
Специальность:
Программное обеспечение
вычислительной техники и АСУ.
Код и пароль:
Адрес:
E-mail:
Дата выполнения:
1. Определите функцию (f a b c), которая равна истине тогда и только тогда, когда из отрезков с длинами a, b и c можно построить треугольник.
2. Определите функцию, зависящую от двух аргументов u и v, являющихся списками, которая вычисляет список всех элементов, содержащихся либо в u, либо в v, но не одновременно в u и v.
3. Напишите функцию, осуществляющую замену элементов списка у на соотвествующие элементы списка х в списке w, например:
y=(a b), x=(1 2), w=((a b) a (c (a (a d)))) => cd)))).
Решение 1.
Основой функции берём условие существования треугольника, которое заключается в том, что сумма двух любых его сторон больше третьей стороны. Это условие (одновременное выполнение условий a+b>c; a+c>b; b+c>a) берём предикатом условного предложения: if <предикат> <форма><альтернатива>.
(defun f (a b c)
(if (and (> (+ a b) c) (and (> (+ a c) b)(> (+ b c) a))) t nil)
)
В случае когда значение предиката "истина" (т. е. треугольник со сторонами a, b, c возможен) значение функции будет "T ", а в противном случае (когда хотя бы одно из трёх условий не выполняется) значение функции - nil.
Решение 2.
Искомая функция:
(defun f (u v)
(if (null v) nil
c)(f u r))))
))
)
Идея состоит в том, что пока список v не пуст из него выделяется голова (c), которая проверяется на равенство с u, затем алгоритм вызывается рекурсивно с оставшейся частью (без головного элемента). Если головной элемент (с) не равен u, то он включается в функцию (головой). Альтернативная ветвь срабатывает если не выполняется условие, что first v atom, т. е. когда u является списком. В этом случае алгоритм вызывается рекурсивно для каждого элемента списка u.
Решение 3.
Входные данные для функции - значения a, b, c, d и функции w, в соответствии с условиями задания. Работа функции следующая:
G(X) G1(X1), G2(X2), G3(X3) .. Gn(Xn) ( G(X)= G1(X1) + G2(X2) + G3(X3) + + Gn(Xn) )
:
a) = X1 X2 X3 Xn; ( )
) G(x1, x2, x3, xn ) = [G1(x1) x {x2}x {x3}x x{xn}] È [{x1} x G2(x2)x {x3}x x{xn}] È [{x1} x {x2} x G3(x3) x x{xn}] È ... È [{x1} x {x2} x {x3} x x Gn (xn)] ;
r)))
( t (cons (f c)(f r))))
))
)
Пока строка w не пуста устанавливается связь c (first w))(r (rest w)) , т. е. выделяется голова и хвост списка. Далее следует ветвление с тремя вариантами и альтернативной ветвью. Если выделенная голова списка эквивалентна a , то формируется список, в котором голова заменяется единицей и далее функция вызывается рекурсивно. Вторая ветвь аналогично первой делает замену b на 2. Третья ветвь срабатывает если элементом списка w выделенным в качестве головы является не a и не b, но тем не менее не список, а единичный элемент. В этом случае формирование списка выполняется с неизменной головой (функция далее также вызывается рекурсивно). Альтернативная ветвь сработает в случае не выполнения первых трёх, т. е. когда выделенная голова списка w будет списком. В этом случае голова поэлементно проверяется рекурсивным вызовом.
Список литературы:
1. Логическое и функциональное программирование. Учебное методическое пособие. Томск. 2000 г.
2. Функциональное программирование. Учебное пособие. Томск. 2000 г.
3. Функциональное программирование. М. Мир. 1983 г.


