Контрольные работы индивидуально, без посредников

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 г.