Функциональное программирование 1-5
.docxТомский межвузовский центр дистанционного образования
Томский государственный университет
систем управления и радиоэлектроники (ТУСУР)
Кафедра автоматизированных систем управления
Контрольная работа № 1
по дисциплине «Логическое и функциональное программирование»
Вариант № 5
Выполнил:
специальности 230105:
Томск 2012 г.
-
Определите функцию (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. у меня включена трассировка.
-
Определите функцию, зависящую от двух аргументов 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)))))