
- •История развития фп.
- •Введение в лисп.
- •Элементарные понятия лисп.
- •Функции. Базовые функции.
- •Использование символов в качестве переменных.
- •Базовые функции.
- •Лекция № 2.
- •Арифметические функции
- •Определение функций.
- •Передача параметров глобальной и локальной переменной.
- •Дополнительные функции обработки списков.
- •Логические функции.
- •Управляющие структуры. Лекция №3.
- •Вводы выводы информации
- •Операторы вычисления локальных переменных и циклических предложений.
- •Дополнительные функции печати.
- •Циклические предложения
- •Лекция №4 (05.03.2013)
- •Рекурсия
- •Функции-функционалы
- •Лямбда-выражения
- •Свойства символов
- •Лекция №5 от 12.03.2013 Внутреннее представление списков и применяющие функционалы
- •Списочные ячейки и базовые функции
- •Сборка мусора
- •Обработка списков без разрушения
- •Разрушающие функции
- •Применяющие функционалы
- •Лекция № 19.03.2013 Массивы и Макросы
- •Макросы
- •Шаги при разработке макроса:
- •Пример программы на Lisp. Дифференцированное выражение.
- •Входные и выходные потоки
Логические функции.
Имеются 3 логические функции – AND, OR, NOT.
(NOT X) – отрицание. Если X – нил, возвращается T. Иначе возвращается NIL.
(OR <арг1> <арг2> <арг3>) – выполняет выражение слева на право, и возвращает значения 1 аргумента который не является NIL. NIL возвращается тогда, когда ни одного не нила не встречено.
(AND - - - ) если встречает NIL. То возвращает NIL как окончательное, без вычисления оставшихся аргументов. В противном случае возвращает последний аргумент.
Управляющие структуры. Лекция №3.
(defun double 1
(when <условие> <lдействие 1><действие 2>….) – выполняется, если выполняется условие
(unless<условие><действие 1><действие 2>) действует, если действие НЕ выполняется
Любую логическую функцию можно заменить COND выражением, и наоборот. В качестве примера, можно привести функцию вычисления первого элемента списка с проверкой.
(defun year (l)
(cond
((listp l) (car l))
(t nil)
)
)
(defun gear1( l)
( and
(listp l)
(car l)
)
)
Вводы выводы информации
(READ)
*(Read) New
Результат: New.
*(setq x ‘(read))
Прочитанное значение будет закреплено с связанным символом S.
(defun tr (arg)
(list (+ arg (read))
(READ)
)
)
*(tr 8) 14
Cat (22 cat)
Функция PRINT – для вывода на экран.
PRINT имеет единственный аргумент
(PRINT <arg>)
Перед выводом аргумента осуществляется переход на новую строку, после вывода вводится пробел. Особенность print – так же как у READ есть побочный эффекет. Если для PRINT
*(print (+ 3 8))
11 11
Если перед скобкой поставить апостроф *(print ‘(+ 3 8))
Результат будет: (+ 3 8) (+ 3 8)
(PROG N <arg1> <arg2>…)
(defun PRINT-SUM( ) (print ‘(type to number)) (print(read)(read))
)
Операторы вычисления локальных переменных и циклических предложений.
(LET ) – связывает набор символов с их значениями.
(LET((var 1 знач 1)
(var2 знач 2)
) Форма 1 форма 2…
Обрабатываются списки одновременно
ШАГИ РАСПИСАТЬ
Пример функции для нахождения плозади пямоугольника:
(defun rectangle(dim) (lte((len(car dim)) (win (cadr dim)) ) (print (list ‘area (*len wid))) (print (list ‘per-r(*(+len wid) 2))) ) )
В результате того, что мы в интерпретаторе введем, например
*(rectangle ‘(3 5)) Получим: (area 15) (per-r 16)
(defun rectangle(dim) (let*((len(car dim)) (wid(cadr dim)) ) (print (list ‘area (*len wid))) (print (list ‘per-r(*(+len wid) 2))) ) )
PROG RETURN – условный вывод из функции. Выполняется для досрочного выхода из функции. Пример:
Написать функцию, которая вводит 2 значения, и выводит их сумму и разность. Если хотябы одно из двух значений числом не является, то ф-я выводит сообщение.
(defun s-d () (prog (x y);локальные переменные print ‘(type number)) (setq x (read)) (and(not(numberp x))(return nil)) (print ‘(type number)) (setq y (read)) (and( not (numberp y))(return nil) (print (+ x y)) (print(- x y)) ))
Варианты следующие: если вызовем в интерпретаторе, резултат будет NIL. Если оба аргумента – числа, то вызов интерпретатора приведет сперва к выводу суммы, разности, и в случае невстречаемости retrun выведет сумму, разность и NIL как результат работы программы.
Дополнительные функции печати.
PRIN1 – склеивает выводимые строчке.
Современные версии lisp позволяют работать со строками.
PRINC – печатает строчке без двойный ковычке.
Так же как PRIN1 – без перевода на новую строчке и пробеле.
TERPRI – осуществляет перевод строки. Аналог Writeln. Параметров нет, возвращемых значений нет.