Ббк 32. 973-018 г рецензент канд физ мат наук, Ф. А. Мурзин
Download 278.16 Kb.
|
FIT-Gor-PP3
Пример 21. Отображение элементов списка с помощью заданной функции Числа представляются в Lisp-е как специальный тип атома. Атом такого типа состоит из указателя с тэгом, специфицирующим слово как число, тип этого числа и адрес собственно числа произвольной длины. В отличие от обычного атома, одинаковые числа при хранении не совмещаются. 16 #’x – эквивалент (FUNCTION x), что является представлением функции в качестве аргумента. Определить функцию покомпонентной обработки двух списков с помощью заданной функции FN.
Пример 22. Покомпонентные действия над векторами, представленными с помощью списков
Пример 23. Применение списка функций к общему аргументу Композициями таких функционалов можно применять серии функций к списку общих аргументов или к параллельно заданной последовательности списков их аргументов. Естественно, и серии, и последовательности представляются списками. Такие формулы удобны при моделировании множеств, графов и металингвистических формул, а к их обработке сводится широкий класс задач не только в информатике. Показанные построения достаточно разнообразны, чтобы можно было сформулировать, в чем преимущества применения техники функционального программирования: отображающие функционалы позволяют строить программы из крупных действий; функционалы обеспечивают гибкость отображений; определение функции может совсем не зависеть от конкретных имен; с помощью функционалов можно управлять выбором формы результатов; параметром функционала может быть представление любой функции, преобразующей элементы структуры; функционалы позволяют формировать серии функций от общих данных; встроенные в Clisp функционалы приспособлены к покомпонентной обработке произвольного числа параметров; любую систему взаимосвязанных функций можно преобразовать к одной функции, используя вызовы безымянных функций. Отложенные действия Императивная организация вычислений по принципу немедленного и обязательного выполнения каждой очередной команды не всегда результативна. Существует много неимперативных моделей управления процессами, позволяющих прерывать и откладывать процессы, а потом восстанавливать их и запускать или отменять. Организация такого управления, достаточного для оптимизации и программирования параллельных процессов, реализуется с помощью так называемых «замедленных» или «ленивых» вычислений (lazy evaluation). Основная идея таких вычислений заключается в сведении вызовов функций к представлению рецептов их вычисления, содержащих замыкания функций в определенном контексте: (λ () fn) – заблокировать вычисление «fn», превратив его в тело функции без аргументов; (fn) – разблокировать выражение «fn» в форме вызова функции без параметров. Непосредственное применение таких формул влечѐт многократное вычисление «fn», поэтому в инструментальном ядре используется реализационная структура данных, названная «рецепт», хранящая варианты представления выражения: { [F (fn . e)] | [T x]} Сначала рецепт представлен как «(F (fn . e))», где «(fn . e)» – это замыкание выражения «fn» в пределах контекста «e». Попытка вычисления рецепта приводит к замене его результатом. По прежнему адресу размещается структура «(T x)», в которой «x» равен результату вычисления «fn» в контексте «e». Таблица 31 Download 278.16 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling