- •Эзотерические языки
- •Программа «Hello, world»:
- •Программа «Hello, world»:
- •Введение в функциональное программирование
- •Развитие функциональных языков
- •Функционально-аппликативное программирование.
- •Функции высших порядков
- •Сортировка:
- •Логическое программирование
- •Основы логических исчислений
- •Рекурсивные правила
- •Логические программы
- •Бинарные (двоичные) деревья
- •Примеры программ:
- •Работа с символьными выражениями
- •Программа, распознающая многочлены от переменной х
- •Дифференцирование
- •Истинность булевских формул
- •Семантика логических программ
- •Сравнение с другими языками программирования
- •Недетерминированное программирование
- •Задача о ферзях
- •Визуальные языки программирования. Графическое программирование.
- •Псевдографика
- •Диаграмма «сущность-связь»
- •Языки потоков данных
- •Жизненный цикл по
- •Заказное по
- •Оценка реализуемости
- •Анализ и постановка задачи
Функции высших порядков
(MAPCAR ‘<функция> <выражение>) – применяется 1 аргумент ко всем элементам второго.
(MAPCAR ‘ADD1 ‘(4 8 3)) (5 9 4)
Требование: функция должна быть одного аргумента (унарной).
(APPLY ‘<функция> <выражение>) – применяется указанная функция к указанному выражению.
(SETQ A ‘(4 5 8 1))
(APPLY ‘+ A) 18
(PUTPROP ‘ВАСЯ ‘МАША ПЕТЯ) ‘ДЕТИ) (PUTPROP – 3 аргумента)
(GET ‘ВАСЯ ‘ДЕТИ) (МАША ПЕТЯ) (GET – 2 аргумента (1 – объект, 2 – его свойство)).
Для создания новых функций: DEFUN
(DEFUN <атом> (<p1> <p2>….<pₓ>) <выражение>)
имя аргументы тело функции
созданной функции
F (x y z)
Функция подсчета количества элементов в списке:
(DEFUN LONG(L)
(COND
(NULL L) 0)
(T (ADD1 (LONG(CDR L))))
)
)
Программа (элементы в обратном порядке):
;Петросова Анастасия Обращение списка
(DEFUN REV(A)
(COND
((NULL A) NIL)
(T (APPEND(REV(CDR A))(LIST(CAR A))))
)
)
Программа (проверка принадлежности элементов множеству):
(DEFUN PROV(A X)
(COND
((NULL X) NIL)
((EQUAL A(CAR X)) T)
(T (PROV A (CDR X)))
)
)
Программа (объединение множеств, представленных списками):
(DEFUN UNION(E F)
(COND
((NULL E) F)
((PROV(CAR E) F)(UNION(CDR E) F))
(T (UNION(CDR E)(CONS(CAR E) F)))
)
)
Программы на Лиспе
I.
;программа решения задачи (последовательность)
(DEFUN ADD1(X) (+1 X))
(DEFUN PIMP(U)
(PRINT(U)
(COND
((EQUAL U 1) NIL)
((ZEROP(REM U 2)) PIMP(/ U 2)))
(T (PIMP (ADD1(* U 3))))
)
)
Отладка:
PIMP(17)
17 52 26 13 40 20 10 5 16 8 4 21
Стеки вызовов
PIMP17 PRINT PIMP17 COND EQUAL COND ZEROP REM ZEROP COND
PIMP17 PIMP17 COND PIMP17 COND ZEROP COND PIMP17
PIMP17 PIMP17 COND PIMP17
PIMP17
PIMP17 ADD1 *U PIMP52
COND PIMP17 ADD1 COND
PIMP17 COND PIMP17 PIMP17
PIMP17 COND
PIMP17
II.
;Перевод балла в оценку
(DEFUN BAL(A)
(COND
((EQUAL A 5) ‘OTLICHNO)
((EQUAL A 4) ‘HOROSHO)
((EQUAL A 3) ‘(UDOVLETVORITELNO)
((EQUAL A 2) ‘(NEUDOVLETVORITELNO)
(T ‘NE_IZVESTNO)
)
)
III.
;сумма квадратов элементов
(DEFUN SKV(A)
(DEFUN SQR(X) (* X X))
(APPLY ‘+(MAPCAR ‘SQR A))
)
IV.
;сумма нечетных элементов 1 вариант.
(DEFUN SUMNECH(A)
(COND
((NULL A) 0)
((ZEROP(REM(CAR A) 2))(SUMNECH(CDR A)))
(T (+(CAR A)(SUMNECH(CDR A))))
)
)
V.
;сумма нечетных элементов 2 вариант.
(DEFUN SUMNECH2(A)
(DEFUN NECHET(X)
(* (REM X 2) X))
(APPLY ‘+ (MAPCAR ‘NECHET A))
)
Сортировка:
;функция сортировки перестановкой
(DEFUN SORTS(X)
(COND
(NULL(CDR X)) X)
(T (CONS(MINS X)(SORTS(REM V(MINS X) X))))
)
)
;поиск минимального элемента в списке
(DEFUN MINS(X)
(COND
((NULL(CDR X)) CAR X))
((<(CAR X)(MINS (CDR X)))(CAR X))
(T (MINS(CDR X)))
)
)
;удаление вхождения 1 элемента из списка
(DEFUN REMV(EL S)
(COND
((NULL S) NIL)
(EQ EL(CAR S))(CDR S))
(T (CONS(CAR S)(REMV EL(CDR S))))
)
)
;функция сортировки вставками
(DEFUN SORTV(X)
(COND
((NULL X) X)
(T INS(CAR X)(SORTV(CDR X))))
)
)
;INS – вставка элемента на место
(DEFUN INS(X S)
(COND
((NULL S) (LIST X)) (LIST X) – сконструировать список из 1 элемента
((<= X (CAR S))(CONS X S))
(T (CONS(CAR S) (INS X(CDR S))))
)
)