ЛИСП
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: изложение с элементами сочинения, эффективность диплом
| Добавил(а) на сайт: Kirillov.
Предыдущая страница реферата | 13 14 15 16 17 18 19 20 21 22 23 | Следующая страница реферата
Функции MAPCAN и MAPCON являются аналогами функций MAPCAR и MAPLIST.
Отличие состоит в том, что MAPCAN и MAPCON не строят, используя LIST, новый
список из результатов, а объединяют списки, являющиеся результатами, в один
список.
4. Макросы.
Программное формирование выражений наиболее естественно осуществляется с помощью макросов. Макросы дают возможность писать компактные, ориентированные на задачу программы, которые автоматически преобразуются в более сложный, но более близкий машине эффективный лисповский код. При наличии макросредств некоторые функции в языке могут быть определены в виде макрофункций. Такое определение фактически задает закон предварительного построения тела функции непосредственно перед фазой интерпретации.
Синтаксис определения макроса выглядит так же, как синтаксис используемой при определении функций формы DEFUN:
(DEFMACRO имя лямбда-список тело)
Вызов макроса совпадает по форме с вызовом функции, но его вычисление отличается от вычисления вызова функции. Первое отличие состоит в том, что в макросе не вычисляются аргументы. Тело макроса вычисляется с аргументами в том виде, как они записаны.
Второе отличие состоит в том, что интерпретация функций, определенных как макро, производится в два этапа. На первом, называемом макрорасширением, происходит формирование лямбда-определения функции в зависимости от текущего контекста, на втором осуществляется интерпретация созданного лямбда-выражения.
_(DEFMACRO setqq (x y)
(LIST ‘SETQ x (LIST ‘QUOTE y))) ( setqq
_(setqq a (b c)) ( (b c)
_a ( (b c)
Макросы отличаются от функций и в отношении контекста вычислений. Во время расширения макроса доступны синтаксические связи из контекста определения. Вычисление же полученной в результате расширения формы производится вне контекста макровызова, и поэтому статические связи из макроса не действуют. Использование макрофункций облегчает построение языка с лиспоподобной структурой, имеющего свой синтаксис, более удобный для пользователя. Чрезмерное использование макросредств затрудняет чтение и понимание программ.
5. Задания к лабораторной работе.
1. Напишите рекурсивную функцию, определяющую сколько раз функция FIB вызывает саму себя. Очевидно, что FIB(1) и FIB(2) не вызывают функцию FIB.
2. Напишите функцию для вычисления полиномов Лежандра (P0(x)=1,
P1(x)=x, Pn+1(x)= ((2*n+1)*x*Pn(x)-n*Pn-1(x))/(n+1) при n>1).
3. Напишите функцию: вычисляющую число атомов на верхнем уровне списка (Для списка (а в ((а) с) е) оно равно трем.); определяющую число подсписков на верхнем уровне списка; вычисляющую полное число подсписков, входящих в данный список на любом уровне.
4. Напишите функцию:
от двух аргументов X и N, которая создает список из N раз повторенных
элементов X;
удаляющую повторные вхождения элементов в список;
которая из данного списка строит список списков его элементов, например, (a
b) ( ((a) (b));
вычисляющую максимальный уровень вложения подсписков в списке;
единственным аргументом которой являлся бы список списков, объединяющую все
эти списки в один;
зависящую от трех аргументов X, N и V, добавляющую X на N-е место в список
V.
5. Напишите функцию:
аналогичную функции SUBST, но в которой третий аргумент W обязательно
должен быть списком;
которая должна производить замены X на Y только на верхнем уровне W;
заменяющую Y на число, равное глубине вложения Y в W, например Y=A, W=((A
B) A (C (A (A D)))) ( ((2 B) 1 (C (3 (4 D))));
аналогичную функции SUBST, но производящую взаимную замену X на Y, т. е. X
( Y, Y ( X.
6. Вычислите значения следующих вызовов:
(APPLY ‘LIST ‘(a b));
(FUNCALL ‘LIST ‘(a b));
(FUNCALL ‘APPLY ‘LIST ‘(a b));
(FUNCALL ‘LIST ‘APPLY ‘(a b);
7. Определите функционал (A-APPLY f x), который применяет каждую функцию fi списка f = (f1 f2 ... fn) к соответствующему элементу xi списка x = (x1 x2 ... xn) и возвращает список, сформированный из результатов.
8. Определите функциональный предикат (КАЖДЫЙ пред список), который истинен в том и только в том случае, когда, являющийся функциональным аргументом предикат пред истинен для всех элементов списка список.
9. Определите функциональный предикат (НЕКОТОРЫЙ пред список), который истинен, когда предикат истинен хотя бы для одного элемента списка.
10. Определите FUNCALL через функционал APPLY.
11. Определите функционал (MAPLIST fn список) для одного списочного аргумента.
12. Определите макрос, который возвращает свой вызов.
Рекомендуем скачать другие рефераты по теме: реферат личность, курсовая работа по менеджменту.
Категории:
Предыдущая страница реферата | 13 14 15 16 17 18 19 20 21 22 23 | Следующая страница реферата