
- •История развития фп.
- •Введение в лисп.
- •Элементарные понятия лисп.
- •Функции. Базовые функции.
- •Использование символов в качестве переменных.
- •Базовые функции.
- •Лекция № 2.
- •Арифметические функции
- •Определение функций.
- •Передача параметров глобальной и локальной переменной.
- •Дополнительные функции обработки списков.
- •Логические функции.
- •Управляющие структуры. Лекция №3.
- •Вводы выводы информации
- •Операторы вычисления локальных переменных и циклических предложений.
- •Дополнительные функции печати.
- •Циклические предложения
- •Лекция №4 (05.03.2013)
- •Рекурсия
- •Функции-функционалы
- •Лямбда-выражения
- •Свойства символов
- •Лекция №5 от 12.03.2013 Внутреннее представление списков и применяющие функционалы
- •Списочные ячейки и базовые функции
- •Сборка мусора
- •Обработка списков без разрушения
- •Разрушающие функции
- •Применяющие функционалы
- •Лекция № 19.03.2013 Массивы и Макросы
- •Макросы
- •Шаги при разработке макроса:
- •Пример программы на Lisp. Дифференцированное выражение.
- •Входные и выходные потоки
Циклические предложения
Что же нам здесь может предложить LISP?
(LOOP – циклический оператор. Например, мы хотим, чтобы данная функция вычисляла сумму всех чисел от 1 до заданного.
(defun add-int (n)) (let ((count1)(total1)) (loop (cond((equal count n) (return total))) (setq count (+1 count)) (setq (total(+total count)) ) ) )
(LOOP форма1 форма2…)
(defun @ИМЯ ФУНКЦИИ@ (ПаРАМЕТРЫ) (let (ИНИЦИАЛИЗАЦИЯ ПЕРМЕНОЙ ИНДЕКСА И РЕЗУЛЬТАТА) (loop (cond(Проверка индекса на выход) (return результат))) (изменение параметра счетчика) (другие изменения в переменной цикла, включая изменение переменной резулттата) ) ) )
Для итераций со списками LOOP так же можно использовать. Функция будет принимать список
(defun double list (list) (let ((newlist nil)) (loop (cond((null list)(return newlist))) (setq newlist(append newlist (list (*2 (car list))) ) (setq list (cdr list)) ) )
Лекция №4 (05.03.2013)
Оператор DO.
(DO ((VAR1 знач1 шаг1) ………….. (varK значК шагК)) (условие окончания форма 11…форма12…) Форма21 форма 22… )
Если выполняются условия – выполняются условия окончания. Если нет – то выполняются формы2…
DO TIMES
(DOTIMES (var num форма-return) (форма-тело) ) var – переменная цикла, num – форма, определяющая число циклов, return – результат, который должен быть возвращен.
При вычислении num-формы получаем некий count, а затем var меняется от 0 до count, не включая count, то есть ровно count раз.
Форма return может быть полезна, например, если необходимо вычислить среднее арифметическое значение элементов списка.
Рекурсия
Функция является рекурсивной, если в ней содержится вызов самой этой функции.
Функция MEMBER
(defun member1 (list item) (cond ((null list) nil) ((eql (car list) item) list) (t (member1(cdr list) item)) ) )
Численная рекурсия - нужна, например, для нахождения всех первых N натуральных чисел.
(defun summall (n) (cond ((zerop n) 0) (T (+ n (sumall(- n 1)))) ) )
Как писать рекурсивные функци??? Прочесть самому!
Формирование списка, содержащего только отрицательные элементы исходного
(defun negnumS (a) (cond ((null a) nil) ((< (car a) 0)(cons (car a) (negnums (cdr a)))) (T (negnums(cdr a))) ) )
Разобрать задачу о волке, козе и капусте. При помощи книги Крюгера.
Функции-функционалы
Функционал – функция, имеющая функциональный аргумент.
Отображающий функционал.
(MAPCAR f ‘(x1 x2….xN))
Результатом работы мапкар будет список, сформированный следующим образом:
((f x1) (f x2) (f x3) … (f xN))
*(mapcar ‘add1 ‘1 2 3))
(2 3 4)
Аргументов может быть несколько. Например, можно определить следующую функцию:
(defun addlist (l1 l2) (mapcar ‘+ l1 l2) )
*(addlist ‘(1 2 3) ‘(3 4 5))
(4 6 8)
Лямбда-выражения
*(mapcar ‘(lambda (x) (+ 1 x)) ‘(1 2 3))
2 5 10
*(addlist ‘(1 2 3) ‘(3 4 5))
(4 6 8)
Свойства символов
Список свойств PropertyList, который для конкретного символа Mary представляет собой следующую таблицу:
Mary
age |
28 |
acceptation |
Lawyer |
Salery |
90 |
children |
Bill Alice Susan |
Свойство Значение
Список свойств Мэри выглядит таким образом: на нечетных местах стоят названия свойств, на четных местах – их значения.
(age 28 occupation lawyer sabary 90 children (Bill Alice Susan))
(GET <Символ> <свойство>)
*(get ‘Mary ‘Age) 28
(SETF (GET <Символ> <Свойство>) <Значение>)
(PUTPROP <Символ><Значение><Свойство>)
*(putprop ‘Marry ‘Cinema ‘Hobby) – Добавляет новое свойство hobby. Помещается в начале списка.
Удаление свойства
(REMPROP <символ> <Свойство>)
(SYMBOL-PLIST <символ>) – в качестве результата – список.