ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Динамическое управление вычислением• THROW, CATCH, а также BLOCK. Эти управляющие формы (кроме QUOTE и лямбда-вызова, а также вызовов функций), в основном, используются в теле лямбда-выражений, определяющих функции. Предложение LET используется для создания связи переменных внутри формы:
(LET ((пep1 знач1) (пер2 знач2)...) форма1 форма2...).
При вычислении этого выражения статические переменные пep1, пер2,... связываются (одновременно) с соответствующими значениями знач1, знач2,..., а затем вычисляются значения форм форма1, форма2,... Значение последней формы возвращается как общий результат. Форма LET* отличается от LET лишь тем, что связывание переменных и вычисление форм происходит не одновременно, а последовательно, вначале 1-е, потом 2-е и т.д. Например:
(let*((x2)(y(*3x))) (list x у) Результат: (2 6).
Предложения PROG1, PROG2 и PROGN позволяют организовывать последовательные вычисления из нескольких вычисляемых форм:
(PROG1 форма1 форма2... формаn) (PROG2 форма1 форма2.. формаn) (PROGN форма1 форма2. формаn).
Различие этих форм лишь в возвращаемых ими в качестве общего значения результатах. Форма PROG1 возвращает значение формы1, PROG2-формы2, PROGN -последней формы n. Например:
(progn (setq x 2) (setq у (* 3 х))) Результат: 6.
Предложение COND является основным средством разветвления обработки. Структура условного предложения такова:
(COND (р1 а1) (р2 а2)... (pn an)).
pi - это предикаты (выражения-условия, которые могут быть либо истинными (Т), либо ложными (NIL)). Их значения вычисляются слева направо, пока не будет получено значение «истина» (Т), затем вычисляется и возвращается в качестве результата результирующее выражение ai. соответствующее 1-му истинному предикату pi. Если истинного предиката нет. то значение COND - NIL. Форма ai для соответствующего предиката может отсутствовать (тогда возвращается значение этого предиката в случае его истинности), или, наоборот, может быть задана последовательность форм для предиката pi - тогда эти формы вычисляются последовательно и возвращается значение последней. В следующем примере с помощью предложения COND определена функция, устанавливающая тип выражения:
(defun тип (1) (cond ((null 1) 'пусто) ((atom 1) 'атом) (t 'список)))
Результат: ТИП. Примеры применения этой функции:
(тип ' (a b с)) Результат: СПИСОК. (тип (atom ' (а т ом))) Результат: ПУСТО.
Для организации ветвления можно использовать и формулы IF, WHEN, UNLESS:
(IF условие то-форма иначе-форма),
что эквивалентно
(COND (условие то-форма) (Т иначе форма)); (WHEN условие форма1 форма2...),
что эквивалентно
(UNLESS (NOT условие) форма! форма2...) или (COND (условие форма1 форма2...)).
Можно применять и выбирающее предложение CASE:
(CASE ключ (список ключей1 форма11 форма12...) (список ключей2 форма21 форма22...)
В этой форме сначала вычисляется значение ключевой формы «ключ», затем происходит сравнение с элементами списков ключей и, если найдено значение ключевой формы, вычисляется последовательность соответствующих форм, значение последней из которых возвращается как значение всего выражения CASE. Предложения PROG, GO и RETURN аналогичны конструкциям неструктурных языков программирования (типа FORTRAN, Бейсик); пользоваться ими не рекомендуется.
Не нашли, что искали? Воспользуйтесь поиском:
|