Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2021-01-31 | 59 |
5.00
из
|
Заказать работу |
|
|
|
|
Пример 31. Функции разных категорий, аналог был реализован в MuLisp
Функция GET выбирает из списка свойств атома заданное свойство.
Определение | Примечание |
(DEFUN EVAL-P (E C) | |
(COND ((ATOM E) (VALUE E C)) | |
((ATOM (CAR E))(COND ((GET (CAR E) 'MONAD) | До применения функ- |
((GET (CAR E) ' MONAD) (CDR E) C)) | ции выясняем ее кате- |
(T (APPLY-P (CAR E)(EVLIS (CDR E) C) C)) | горию |
)) | |
(T (APPLY-P (CAR E)(EVLIS (CDR E) C) C)) | |
)) |
|
Каждое имя функции сопровождается свойством MONAD, задающим правило применения фукнции.
Определение | Примечание |
(DEFUN APPLY-P (F ARGS C) | |
(COND ((ATOM F)(APPLY-P (FUNCTION F C) ARGS C)) | |
((ATOM (CAR F))(COND ((GET (CAR F) 'MACRO) | Для макрофункций |
(APPLY-P ((GET (CAR F) 'MACRO) | нет необходимости |
(CDR F) C) ARGS C)) | в вычислении аргу- |
(T (APPLY-P (EVAL F E) ARGS C)) | мента |
)) | |
(T (APPLY-P (EVAL F E) ARGS C)) | |
)) |
Пример 33. Специальные макрофункции поддерживают пост-вычисления параметров
Или то же самое с вынесением общих подвыражений во вспомогатель- ные параметры.
|
Определение | Примечание |
(DEFUN EVAL-P (E C) | |
(COND ((ATOM E) (VALUE E C)) | |
((ATOM (CAR E)) | |
((LAMBDA (V) (COND (V (V(CDR E) C)) | Однократный поиск катего- |
(T (APPLY-P (CAR E)(EVLIS (CDR E) C) C | рии |
)) (GET (CAR E) ' MONAD))) | |
(T (APPLY-P (CAR E)(EVLIS (CDR E) C) C)) | |
)) |
|
Определение | Примечание |
(DEFUN APPLY-P (F ARGS C) | |
(COND ((ATOM F)(APPLY-P (FUNCTION F C) ARGS C | |
((ATOM (CAR F)) | |
((LAMBDA (V) (COND (V (APPLY-P (V (CDR F) | |
C) ARGS C)) | |
(T (APPLY-P (EVAL F E) ARGS C)) | |
))(GET (CAR F) 'MACRO))) | |
(T (APPLY-P (EVAL F E) ARGS C)) | |
)) | Однократный поиск |
свойства |
Пример 35. Исключение лишнего поиска свойства MACRO
Расширение системы программирования при таком определении интер- претации осуществляется простым введением/удалением соответствующих свойств атомов и функций.
Полученная схема интерпретации допускает разнообразные категории функций, реализуемые как отдельные монады, и макросредства конструиро- вания функций, позволяет задавать различные механизмы передачи парамет- ров функциям, что в свое время было реализовано в MuLisp. Так, в языке Clisp различают кроме обычных, обязательных и позиционных еще и необя- зательные (факультативные), ключевые и серийные (многократные, с пере- менным числом значений) параметры.
|
ственно пишется с помощью рекурсивного Prog-выражения, часто исполь- зуемое для показа разницы в эффективности разных парадигм.
Pascal | Примечание |
function REV (x: list):list; label A, B; var y, z: list; begin A: if null (x) then REV:= y; | Определение функции REV, вырабатывающей список. Объявлены метки и локальные переменные. Меткой «A» помечена проверка завершения |
z:= car (x); if atom (z) then goto B; | и результат. Выбор очередного элемента для реверсирования. Для атома переход на метку «В» в обход реверсирования |
Пример 36 (начало). Представление программы на языке Pascal. Функция rev
|
обращает все уровни списка так, что rev от (A ((B C) D)) даст ((D (C B))A)
Pascal | Примечание |
z:= REV (z); B: y:= cons (z, y); x:= cdr (x); goto A; end; | Замена элемента на его реверс. Меткой «В» помечена сборка результата. Шаг продвижения по списку. Переход на метку «А» для дальнейшего реверсирования |
|
обращает все уровни списка так, что rev от (A ((B C) D)) даст ((D (C B))A)
Lisp | Примечание |
(defun REV (X) (prog (Y Z) A (cond ((null X)(return Y))) (setq Z (car X)) (cond ((atom Z)(goto B))) (setq Z (rev Z)) B (setq Y (cons Z Y)) (setq X (cdr X)) (go A) )) | Определение функции REV, реализуемая императивно с переменными. «A» помечает завершение и дан результат. Выбор очередного элемента для реверсирования. Для атома переход на метку «В» в обход реверсирования. Замена элемента на его реверс. «В» помечает сборка реверсируемого списка. Шаг продвижения по списку. Переход на метку «А» для дальнейшего реверсирования |
|
В принципе, SET и SETQ могут быть реализованы с помощью ассоциа- тивного списка примерно так же, как и поиск значения, только с сохранением связей, расположенных ранее изменяемой переменной:
(defun SET (X Y) (cons (cons X Y) Alist)))
При разработке и отладке программ происходит развитие средств и мето- дов обработки данных, что приводит к изменению типов представления объ- ектов. Объекты из неопределенных становятся константами или перемен- ными, из обработки скаляров формируется обработка структур данных, от структур данных вероятен переход к функциям и файлам и т. п.
Не менее существенное развитие происходит и на уровне постановки за- дачи. Задача из новой, решение которой имеет ранг пробы или демонстрации, становится направлением исследования, в котором созревают практичные или точные подзадачи, возможен и переход к поиску решений на пределе воз- можностей оборудования. Требования к средствам и методам решения задач
|
Наиболее очевидные следствия из выбранных принципов ФП:
|
– раскрутка СП – процесс разработки программ разбивается на фазы: по- строение базиса и его пошаговое расширение;
– мемоизация – рассмотрение программы как реализации алгоритма есте- ственно дополняется табличной реализацией функций, т. е. допустимо ис- пользование хранимых графиков функций в виде структур из аргументов и соответствующих результатов наряду с процедурами;
– аддитивность – прозрачность ссылок обеспечена совпадением значений одинаково выглядящих формул, вычисляемых в одинаковом контексте;
– комбинаторика – предпочтение универсальных функций и функцио- нально полных систем, трудоемкость первичной реализации которых ком- пенсируется надежностью определений и простотой применения.
Язык программирования Lisp и сложившееся на его основе функциональ- ное программирование реально показали свои сильные стороны как инстру- ментарий исследования и освоения новых областей применения вычисли- тельной техники. Это аргумент в пользу функционального подхода к реше- нию новых сложных задач:
– доступны преобразования программ и процессов;
–
|
– поддерживается гибкое управление базами данных;
– возможна оптимизация информационных систем, вплоть до полного ис- ключения потерь информации;
– моделирование общения.
Спецификация
Таблица 30
|
|
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!