Функционалы. Методы обработки S-выражений. Методы обработки списков Лекция 12.

Презентация:



Advertisements
Похожие презентации
Основы программирования в Лиспе. Функции. Рекурсия Лекция 11.
Advertisements

ДРУГИЕ ФОРМЫ РЕКУРСИИ I Функциональноепрограммирование Григорьева И.В.
Базовые функции Функциональное программирование Григорьева И.В.
Функциональное программирование Лекция 2 (13) Функционалы и их разновидности.
ИМЯ И ЗНАЧЕНИЕ СИМВОЛА Функциональное программирование Григорьева И.В.
ФУНКЦИИ БОЛЕЕ ВЫСОКОГО ПОРЯДКА Функциональное программирование Григорьева И.В.
Другие формы рекурсии II Функциональное программирование Григорьева И.В.
Функциональное программирование МарГТУ2009 г. 1 Функции. Базовые функции. Лекция 2.
Определение функций Функциональное программирование Григорьева И.В.
ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ СПИСКОВ. Лисповская память состоит из списочных ячеек Лисповская память состоит из списочных ячеек Значение представляется указателем.
Основы рекурсии Рекурсивно-логическое программирование Григорьева И.В.
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
1 Кубенский А.А. Функциональное программирование. Глава 3. Стили функционального программирования. Глава 3. Стили функционального программирования 3.1.
ВЫЧИСЛЕНИЕ В ЛИСПЕ Функциональное программирование Григорьева И.В.
Логика и управление Функции Eugeny L Yakimovitch 2008
ОТОБРАЖАЮЩИЕ ФУНКЦИОНАЛЫ. Важный класс функционалов в практическом программировании на языке Лисп образуют отображающие функции или МАР-функции. МАР-функционалы.
1 Кубенский А.А. Функциональное программирование. Глава 3. Стили функционального программирования. Глава 3. Стили функционального программирования 3.1.
Установочная лекция по дисциплине Старший преподаватель каф. ВТ Юлия Вадимовна Новицкая
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
Логическое программировыание Презентация 5 Списки в Прологе.
Транксрипт:

Функционалы. Методы обработки S-выражений. Методы обработки списков Лекция 12

Применяющие функционалы. Функция Funcall FUNCALL принимает произвольное количество аргументов, применяет свой первый (функциональный) аргумент к оставшемуся списку аргументов. (funcall '* ) ==> С помощью FUNCALL можно давать именам функций синонимы и «переопределять» стандартные функции. (setq сложить '+) ==> + (funcall сложить 1 2 3) ==> 6

Функция Funcall (funcall '* ) (setq сложить '+) (funcall сложить 1 2 3) +6+6 (setq cons '*) (cons 2 3) (funcall cons 2 3) (funcall 'cons 2 3) * (setq сложить '+) (funcall сложить 2 3 4) (funcall 'сложить 2 3 4) – для HomeLisp или ошибка для других версий

Применяющие функционалы. Функция Apply APPLY похожа на функцию FUNCALL, но имеет ровно два аргумента: первый - функциональный, а второй является списком произвольной длины. Вызов APPLY заключается в том, что вычисляется функция, заданная первым аргументом, со списком параметров, заданным вторым аргументом APPLY. (setq mult '*) mult (apply mult '( )) *

Отображающие функционалы. Функции MAPCAR и MAPLIST Отображающие функционалы применяют функциональный аргумент к элементам списка, в результате чего строится новый список. Отсюда и название: исходный список отображается на результирующий. MAPLIST принимает два аргумента: -значение первого аргумента должно быть списком; -второй аргумент - функциональный. Функция, задаваемая вторым аргументом, должна принимать на вход список. Результат: функция, заданная вторым аргументом, последовательно применяется к значению первого аргумента, к этому списку без первого элемента, без первых двух элементов и т.д. до исчерпания списка. Результаты вызова функции объединяются в список, который функционал вернет в качестве значения.

Отображающие функционалы. Функции MAPCAR и MAPLIST MAPCAR применяет функциональный аргумент не к остаткам списка, а последовательно к каждому элементу. Результаты этих применений объединяются в список, который и возвращает функционал MAPCAR. (maplist '( ) (function sumlist))( ) (maplist '( ) (function reverse)) (( ) ( ) ( ) (6 5 4) (6 5) (6)) (mapcar '( ) (function (lambda (x) (* x x))))( )

Методы обработки S-выражений. Функция AMONG (DEFUN among (x y) (COND ((ATOM y) (EQ x y)) ((among x (CAR y)) (QUOTE T)) ((QUOTE T) (among x (CDR y) )) ) (among 'A '(C (A B)))T (among 'A '(C D B))Nil Проверка, входит ли заданный атом в данное S- выражение

Методы обработки S-выражений. Функция EQUAL (DEFUN equal (x y) (COND ((ATOM x) (COND ((ATOM y) (EQ x y)) ((QUOTE T) (QUOTE NIL)) ) ) ((equal (CAR x)(CAR y)) (equal (CDR x)(CDR y)) ) ((QUOTE T) (QUOTE NIL) ) ) (equal '(A (B)) '(A (B)))T (equal '(A B) '(A. B))Nil Предикат, проверяющий равенство двух S-выражений

Методы обработки S-выражений. Функция SUBST (DEFUN subst (x y z) (COND ((equal y z) x) ((ATOM z) z) ((QUOTE T)(CONS (subst x y (CAR z)) (subst x y (CDR z)) ) (subst '(x. A) 'B '((A. B). C))((A x. A). C) (subst 'x '(B C D) '((A B C D)(E B C D)(F B C D)))((A. x) (E. x) (F. x)) Функция трех аргументов x, y, z, строящая результат замены S-выражением x всех вхождений y в S-выражение z

Методы обработки S-выражений. Функция NULL (DEFUN null (x) (COND ((EQ x (QUOTE NIL)) (QUOTE T)) ((QUOTE T) (QUOTE NIL)) ) Предикат, отличающий пустой список от остальных S-выражений

Методы обработки S-выражений. Функция PAIR_TO_LIST (DEFUN pair_to_list (x) (CONS (CAR x) (CONS (CDR x) NIL)) ) (pair_to_list '(A B))(A B) Размещение компонентов точечной пары в двухэлементном списке

Методы обработки S-выражений. Функция LIST_TO_PAIR (DEFUN list_to_pair (x) (CONS (CAR x) (CADR x)) ) (list_to_pair '(A B C))(A. B) Построение из первых двух элементов списка точечной пары

Методы обработки списков. Функция APPEND (DEFUN append (x y) (COND ((null x) y) ((QUOTE T) (CONS (CAR x) (append (CАR x) y) ) Функция двух аргументов x и y, сцепляющая два списка в один (append '(A B) '(C D E))(A B C D E)

Методы обработки списков. Функция MEMBER (DEFUN member (x y) (COND ((null y) (QUOTE NIL) ) ((equal x (CAR y)) (QUOTE T) ) ((QUOTE T) (member x (CDR y)) ) Функция двух аргументов x и y, выясняющая, встречается ли S-выражение x среди элементов списка y (member '(a) '(b (a) d))T (member 'a '(b (a) d))Nil

Методы обработки списков. Функция PAIRLIS (DEFUN pairlis (x y al) (COND ((null x) al) ((QUOTE T) (CONS (CONS (CAR x) (CAR a1) ) (pairlis (CDR x) (CDR y) al) ) ) ) (pairlis '(A B C) '(u t v) '((D. y)(E. y)) ) ((C. v)(B. t)( A. u) (D. y)(E. y)) Функция аргументов x, y, al строит список пар соответствующих элементов из списков x и y и присоединяет их к списку al

Методы обработки списков. Функция ASSOC (DEFUN assoc (x al) (COND ((eq x (CAAR al)) (CAR al) ) ((QUOTE T) (assoc x (CDR al)) ) ) Функция поиска определения или значения по таблице, реализованной в форме ассоциативного списка (assoc 'B '((A. (m n)) (B. (CAR x)) (C. w) (B. (QUOTE T)) ) (B. (CAR x))

Методы обработки списков. Функция INSERT (DEFUN insert (al x z) (COND ((null al) NIL) ((equal (CAR al) x) (CONS z al) ) ((QUOTE T) (CONS (CAR al) (append (CDR al) x z) )) ) Вставка z перед вхождением ключа x в список al (insert '(a b c) 'b 's)(a s b c)

Методы обработки списков. Функция ASSIGN (DEFUN assign (x v al) (COND ((Null al) (CONS(CONS x v) NIL ) ) ((equal x (CAAR al)) (CONS(CONS x v) (CDR al)) ) ((QUOTE T) (CONS (CAR al) (assign x v (CDR al)) )) ) Модель присваивания переменным, хранящим значения в ассоциативном списке (assign 'a 111 '((a. 1)(b. 2)(a. 3)))((a. 111)(b. 2)(a. 3)) (assign 'a 111 '((c. 1)(b. 2)(a. 3)))((c. 1)(b. 2)(a. 111)) (assign 'a 111 '((c. 1)(d. 3)))((c. 1)(d. 3) (a. 111))

Методы обработки списков. Функция REVERSE (DEFUN reverse (m) (COND ((null m) NIL) (T (append (reverse (CDR m)) (list(CAR m)) ) ) ) ) Обращение списка (reverse (a b c))(c b a)