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

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

.docx
Скачиваний:
31
Добавлен:
22.06.2014
Размер:
173.76 Кб
Скачать

Томский межвузовский центр дистанционного образования

Томский государственный университет

систем управления и радиоэлектроники (ТУСУР)

Кафедра автоматизированных систем управления

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

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

Вариант № 5

Выполнил:

специальности 230105:

Томск 2012 г.

  1. Определите функцию (f a b c), которая равна истине тогда и только тогда, когда из отрезков с длинами a,b,c можно построить треугольник.

Решение:

Начнем с того, что условием постройки треугольника будет условие:

Это и будем реализовывать в Xlisp.

Для определения нашей функции будем использовать сторонний редактор, в моем случае Notepad++

Для задания своих функций в lisp’е используют специальную форму defun: (defun <name_f><parametr><body>). Определяем ее:

(defun triangle(a b c)….

Triangle-, это у нас имя нашей функции, имя может быть произвольным, но лучше, чтобы было осмысленным. (a b c) входные параметры. Здесь для сравнения одной стороны треугольника с суммой двух других используем условное предложение if. Наша функция будет истинна тогда, когда все 3 условия будут соблюдены:

(if (and(>= (+ b c) a) (and (>= (+ a c) b) (>= (+ a b) c)))

Если условия соблюдены, то выводится надпись «Triangles success», в противном случае «Triangle fail».

Пример работы программы:

p.s. у меня включена трассировка.

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

Итак, допустим у нас два списка ‘(1 2 3) ‘(4 2 6), для получения элементов которые не входят в оба множества сразу, будет делать так:

  • Проверка на наличие первого элемента списка ‘(4 2 6) во множестве ‘(1 2 3)

  • Если нет, то добавляем первый элемент (4) в список ‘(1 2 3) т.е. (1 2 3 4)

  • Если да, то удаляем из списка (1 2 3 4) элемент, т.е. (1 3 4) и т.д.

Пример работы программы:

(defun finder (u v)

(cond

((null v) u)

((listp v)

(finder (if (member (first v) u) (delete (first v) u) (append u `(,(first v))))

(rest v)))))