Макрокоманда

Макрокоманда

Макрокоманда или макрос (от греч. μακρός - большой, долгий;) — программный объект, который во время вычисления заменяется на новый объект, создаваемый определением макроса на основе его аргументов, затем выражается обычным образом.

Содержание

Макросы в прикладных программах

Во многих «офисных» продуктах (OpenOffice.org, Microsoft Office и др.), в графических программах (например, CorelDRAW) при обработке макроса автоматически выполняется заданная для каждого макроса последовательность действий — нажатия на клавиши, выбор пунктов меню и т. д. Предоставляется интерфейс для записи новых и перезаписи существующих макросов.

Используя макросы, можно значительно (в десятки, а то и в сотни раз) увеличить эффективность работы с приложением. Помимо выполнения набора встроенных в приложение команд, макрос позволяет производить обработку внешних файлов, загрузку и передачу файлов и данных через интернет, чтение и изменение настроек операционной системы. В большинстве случаев макрорекордер (режим записи действий пользователя в виде макроса) выдаёт код, нуждающийся в доработке. Но, тем не менее, и такой макрос значительно сокращает время, требующееся на выполнение рутинных операций.

Корректный перевод термина с английского — «макрокоманда», слово же «макрос» получило распространение благодаря использованию в локализованных продуктах американской корпорации Microsoft.

К лучшим из существующих на сегодняшний день универсальным программам для создания макросов и автоматизации работы можно отнести линейки "Comfort Keys", "Robotask" и "Hot Keyboard".[источник не указан 970 дней] Каждая из данных программ обладает собственными преимуществами перед остальными.[уточнить] Говоря о специализированных программах данного направления, следует упомянуть об "AutoHook" для упрощения работы в "AutoCAD", причём наиболее функциональной является версия программы для "AutoCAD 2006", а не для более поздних версий (что проверено для версий "2007" и "2008", работающих с "AutoCAD"ом соответствующих годов выпуска).

Макросы в программировании

В языках ассемблера, а также в некоторых других языках программирования, макрос — символьное имя, заменяемое при обработке препроцессором на последовательность программных инструкций.

Для каждого интерпретатора (языков ассемблера) существует специальный синтаксис объявления и вызова макросов. Макрос может «разворачиваться» в различные последовательности инструкций при каждом вызове, в зависимости от сработавших разветвлений внутри макроса и переданных ему аргументов.

Макросы в языке Лисп

Часто бывает полезно не прописывать вычисляемое выражение вручную, а сформировать его с помощью программы. Эта идея автоматического динамического программирования особенно хорошо[источник не указан 536 дней] реализуется в языке Лисп, поскольку программа в этом языке также представляется в виде списка. Управлять тем, что надо вычислить, а что оставить, без изменения, можно с помощью использования EVAL и QUOTE, соответственно[1]. Однако, наиболее естественно программное формирование выражений осуществляется с помощью специального механизма — макросов (macro). Внешне макросы определяются и используются так же, как функции, отличается лишь способ их вычисления. Макросы дают возможность расширять синтаксис и семантику Лиспа и использовать новые подходящие для решаемой задачи формы предложений.

Абстракции такого характера называют абстракциями проблемной области (domain abstraction), а определяемое ими расширение языка Лисп — встроенным языком (embedded language). Однако, с их использованием тоже связаны свои трудности и опасности — создаваемые в процессе вычислений формы часто трудно увидеть непосредственно из определения макроса или из формы его вызова. Синтаксис определения макроса выглядит так же, как синтаксис используемой при определении функций формы DEFUN:

(DEFMACRO имя список_формальных_параметров тело)

.

Вызов макроса совпадает по форме с вызовом функции, но его вычисление отличается от вычисления вызова функции.

  • Первое отличие состоит в том, что в макросе не вычисляются аргументы — тело макроса вычисляется с аргументами в том виде, как они записаны.
  • Второе отличие связано со способом вычисления тела макроса — вычисление вызова макроса состоит из двух последовательных этапов.
    • На первом этапе осуществляется вычисление тела определения с аргументами из вызова таким же образом, как и для функции. Этот этап называют этапом расширения (expansion) или раскрытия макроса, поскольку возникающая форма, как правило, больше и сложнее исходной формы вызова. Часто говорят и о трансляции (translation) макросов, поскольку на этапе расширения макровызов они транслируется в некоторое вычислимое выражение на языке Лисп.
    • На втором этапе вычисляется полученная из вызова раскрытая форма, значение которой возвращается в качестве значения всего макровызова. Существенно отметить, что если во время расширения макровызова доступны контекстные связи из определения, то вычисление раскрытой формы производится вне контекста макровызова.

Приведем пример макроса, определяющего SETQQ, который действует наподобие SETQ, но блокирует вычисление и второго своего аргумента:

 _(defmacro setqq (х у)
 (list 'setq х (list (quote у))) 
 SETQQ
 _(setqq список (a b с)) ; 
 (ABC)       
 _список
 (А В С).

Поясним выполняемые действия. После этапа расширения макровызова значением тела макроса было:

(SETQ СПИСОК (QUOTE (А В С)))

На втором этапе эта программно созданная форма вычисляется обычным образом и её значение возвращается в качестве значения вызова макроса. В данном случае у возникшей формы есть побочный эффект.

Итак, макрос — это форма, которая во время вычисления заменяется на новую, обычно более сложную форму, которая затем вычисляется, но вычисления на втором этапе производится вне контекста макровызова, и поэтому статические связи из макроса не действуют.

В заключение следует отметить, что написание макросов (как и любых функций из области метапрограммирования) является существенно более сложной задачей, чем определение обычных функций, поскольку нужно точно представлять, что вычисляется на этапе расширения, а что на втором этапе. Для облегчения написания макросов в языке Лисп используются специальные средства:

  • одно из них называется обратной блокировкой, которая, как обычная блокировка прекращает оценивание (она обозначается обратным апострофом «’»);
  • другое — применяется внутри обратно блокированного выражения, локально отменяя действие обратной блокировки (обозначается запятой «,» перед каждым, предназначенным для вычисления подвыражением).

В заключение приведем без комментариев пример на определение новых синтаксических форм[2], которые с помощью макросов транслируются в известные интерпретатору или ранее определённые формы. Пусть, мы хотим использовать для представления условного выражения предложение на русском языке[стиль!]:

(ЕСЛИ условие ТО р ИНАЧЕ q).

Его можно было бы определить следующим образом:

 (defmacro если (условие то р иначе q)(if ,условие ,р ,q))
 _(setq х '(alea iacta est)) 
 (ALEA IACTA EST)
 _(если (atom x) то 'орел иначе 'решка)
 РЕШКА.

См. также

Ссылки

Примечания

  1. Функции пользователя. Макросы в системе muLISP85
  2. Хьювенен Э., Сеппанен Й. Мир Лиспа., т.1



Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?
Синонимы:

Полезное


Смотреть что такое "Макрокоманда" в других словарях:

  • Макрокоманда — в интерактивных системах команда, вызывающая выполнение последовательности других команд. См. также: Интерактивные информационные системы Финансовый словарь Финам. Макрокоманда Макрокоманда выражение в тексте программы, вместо которого… …   Финансовый словарь

  • макрокоманда — сущ., кол во синонимов: 2 • команда (163) • макрос (6) Словарь синонимов ASIS. В.Н. Тришин. 2013 …   Словарь синонимов

  • МАКРОКОМАНДА — (macro) Последовательность команд компьютеру, которые выдаются специальным программным обеспечением, называемым генератором макрокоманд (macrogenerator). Вместо того чтобы каждый раз, когда в этом возникает необходимость, писать одну и ту же… …   Словарь бизнес-терминов

  • макрокоманда — Предложение языка программирования, вместо которого макрогенератор подставляет макрорасширения. [ГОСТ 19781 90] Тематики обеспеч. систем обраб. информ. программное EN macroinstruction …   Справочник технического переводчика

  • макрокоманда — makrokomanda statusas T sritis automatika atitikmenys: angl. interpretive instruction; macro; macrocommand; macroinstruction; macroorder; macros vok. Makro, m; Makrobefehl, m; Makroinstruktion, f rus. макрокоманда, f pranc. macro instruction, f …   Automatikos terminų žodynas

  • Макрокоманда — 32. Макрокоманда Macroinstruction Предложение языка программирования, вместо которого макрогенератор подставляет макрорасширения Источник: ГОСТ 19781 90: Обеспечение систем обработки информации программное. Термины и определения …   Словарь-справочник терминов нормативно-технической документации

  • макрокоманда — макроком анда, ы …   Русский орфографический словарь

  • макрокоманда — макрокома/нда, ы …   Слитно. Раздельно. Через дефис.

  • макрокоманда — и, ж., спец. Команда машинної мови, еквівалентна декільком машинним командам. || Речення мови програмування, на місце якого макрогенератор підставляє макророзширення …   Український тлумачний словник

  • автоматическая макрокоманда — Макрокоманда, которая автоматически выполняется при наступлении соответствующего события, например, запуска приложения. В программах корпорации Microsoft (Excel, Word и др.) название автоматической макрокоманды начинается с Auto.… …   Справочник технического переводчика


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»