Связанные понятия
Каламбур типизации является прямым нарушением типобезопасности. Традиционно возможность построить каламбур типизации связывается со слабой типизацией, но и некоторые сильно типизированные языки или их реализации предоставляют такие возможности (как правило, используя в связанных с ними идентификаторах слова unsafe или unchecked). Сторонники типобезопасности утверждают, что «необходимость» каламбуров типизации является мифом.
Функции первого класса являются неотъемлемой частью функционального программирования, в котором использование функций высшего порядка является стандартной практикой. Простым примером функции высшего порядка будет функция Map, которая принимает в качестве своих аргументов функцию и список и возвращается список, после применения функции к каждому элементу списка. Чтобы язык программирования поддерживал Map, он должен поддерживать передачу функций как аргумента.
В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.
Подробнее: Объявление (информатика)
Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).
Упоминания в литературе
На третьей серии рисунков "Поиск маршрута вывода на миварной сети при его отсутствии" (рисунки 24 – 31) продемонстрирован случай, когда нет маршрута логического вывода, а входные объекты и выходные объекты находятся в разных и невзаимосвязанных сегментах сети. Говоря математическим языком, это ситуация, когда минимальный разрез многополюсной сети между входом и целью получается равным нулю (нет связи). Схематично показано, как
пользователи, аналогично предыдущему варианту, начинают вытягивать маршрут вывода, но обнаруживается, что вытянутые концы сети не связаны между собой, т.е. маршрута вывода нет. Поэтому человечки и падают в разные стороны, а вверх поднимаются разорванные фрагменты миварной сети. Даже в таком плохом варианте у миварных сетей есть важные преимущества: мы видим, где произошел разрыв или автоматически определяем, каких именно входных объектов не хватает для продолжения поиска маршрута логического вывода. Следовательно, возвращаясь к познающе-диагностическим системам, мы можем подать сигналы на систему датчиков или каким-либо другим образом запросить необходимые ей для дальнейшей работы входные данные.
В механике со времен Мопертюи и Лагранжа принято говорить о
«виртуальных движениях» или множествах «возможных продолжений», понимая под этим любые «возможные движения», согласные со связями, но необязательно удовлетворяющие законам физики. (Для того чтобы подчеркнуть трудности точного определения и условность языка, обратим внимание на то, что согласие со связями – это тоже закон природы.) Эти «виртуальные движения» могут порождаться любыми произвольными, в том числе «случайными», причинами. Значит, уже в XVIII веке было понятно, что изменчивость (и, в частном случае, стохастичиость) предоставляет природе целое «поле возможностей», из которых отбирается, реализуется лишь некоторая исключительная совокупность, удовлетворяющая некоторым специальным условиям (принципам отбора).
В механике со времен Мопертьюи (и Лагранжа) принято говорить о
«виртуальных движениях» или множествах «возможных продолжений», понимая под этим любые «возможные» движения, согласные со связями, но не обязательно удовлетворяющие законам физики (Для того чтобы подчеркнуть трудности определений и условность языка, обратим внимание на то, что согласие со связями – это тоже закон природы.) Эти «виртуальные движения» могут порождаться любыми произвольными, в том числе и случайными, причинами. Значит, уже в XVIII в. было понято, что изменчивость (если угодно, стохастичность) предоставляет природе целое «поле возможностей», из которого отбирается, т. е. реализуется, лишь некоторая исключительная совокупность, удовлетворяющая некоторым специальным условиям (принципам отбора).
Пока я рассматривал только непонимание. По мере продолжения могут выявляться более существенные расхождения. (В этой области нет четкой границы, отделяющей непонимание от существенного расхождения.) Китчер полагает, что интерпретация делает возможной «полную коммуникацию, преодолевающую революционные разрывы», и что процесс, посредством которого она это делает, «расширяет возможности исходного языка» путем добавления таких терминов, например, как «флогистон» и связанных с ним (с. 691). В отношении второго, я полагаю, Китчер серьезно заблуждается. Хотя язык и можно обогатить, он может быть расширен только в определенном направлении. Например, язык химии XX века был обогащен путем добавления
новых элементов, таких, например, как беркелий и нобелий. Но не существует последовательного или интерпретационного пути добавления качественного начала без изменения того, что является элементом, и большого количества объектов кроме этого. Такие изменения не просто обогащают, они скорее изменяют, чем добавляют к тому, что было раньше; и язык, который мы получаем в результате, уже не может непосредственно передавать все законы современной химии. В частности, законы, содержащие термин «элемент», оказываются невыразимыми.
В конце 60-х годов начал разрабатываться ситуационный подход куправлению. Он стал логическим продолжением теории систем. Ситуационный подход не отвергает приведенные теории. Он использует возможности прямого приложения науки к конкретным ситуациям и условиям. Центральным моментом этого подхода является ситуация. Под ситуацией понимается конкретный набор внутренних и внешних обстоятельств (факторов), которые оказывают воздействие на организацию в данное время. Именно ситуация определяет
функции управления, выбор методов, стилей, структур, принципов управления для достижения целей организации наиболее эффективным способом. С точки зрения ситуации лучшего способа управления не существует. Ситуационный подход пытается определить, какие переменные являются значимыми и как они влияют на эффективность организации.
Связанные понятия (продолжение)
Ленивые вычисления (англ. lazy evaluation, также отложенные вычисления) — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления.
В информатике и теории автоматов состояние цифровой логической схемы или компьютерной программы является техническим термином для всей хранимой информации, к которой схема или программа в данный момент времени имеет доступ. Вывод данных цифровой схемы или компьютерной программы в любой момент времени полностью определяется его текущими входными данными и его состоянием.
Подробнее: Состояние (информатика)
Сопрограммы (англ. coroutines) — методика связи программных модулей друг с другом по принципу кооперативной многозадачности: модуль приостанавливается в определённой точке, сохраняя полное состояние (включая стек вызовов и счётчик команд), и передаёт управление другому. Тот, в свою очередь, выполняет задачу и передаёт управление обратно, сохраняя свои стек и счётчик.
Подробнее: Сопрограмма
Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.
Хвостовая рекурсия — частный случай рекурсии, при котором любой рекурсивный вызов является последней операцией перед возвратом из функции. Подобный вид рекурсии примечателен тем, что может быть легко заменён на итерацию путём формальной и гарантированно корректной перестройки кода функции. Оптимизация хвостовой рекурсии путём преобразования её в плоскую итерацию реализована во многих оптимизирующих компиляторах. В некоторых функциональных языках программирования спецификация гарантирует обязательную...
Мона́да — это абстракция линейной цепочки связанных вычислений. Монады позволяют организовывать последовательные вычисления.
Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся...
Подробнее: Побочный эффект (программирование)
Фу́нкция вы́сшего поря́дка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.
Опера́ция — конструкция в языках программирования, аналогичная по записи математическим операциям, то есть специальный способ записи некоторых действий.
Алгебраи́ческий тип да́нных — в информатике наиболее общий составной тип, представляющий собой тип-сумму из типов-произведений. Алгебраический тип имеет набор конструкторов, каждый из которых принимает на вход значения определённых типов и возвращает значение конструируемого типа. Конструктор представляет собой функцию, которая строит значение своего типа на основе входных значений. Для последующего извлечения этих значений из алгебраического типа используется сопоставление с образцом.
Объектами
первого класса (англ. first-class object, first-class entity, first-class citizen) в контексте конкретного языка программирования называются элементы, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.
Тип-сумма (англ. sum type; также Σ-тип, меченое объединение) — конструкция в языках программирования и интуиционистской теории типов, тип данных, построенный как дизъюнктное объединение исходных типов.
Свёртка списка (англ. folding, также известна как reduce, accumulate) в программировании — функция высшего порядка, которая производит преобразование структуры данных к единственному атомарному значению при помощи заданной функции. Операция свёртки часто используется в функциональном программировании при обработке списков. Свёртка может быть обобщена на произвольный алгебраический тип данных при помощи понятия катаморфизма из теории категорий.
Идиома программирования — устойчивый способ выражения некоторой составной конструкции в одном или нескольких языках программирования. Идиома является шаблоном решения задачи, записи алгоритма или структуры данных путём комбинирования встроенных элементов языка.
Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. То есть вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.
В информатике, спи́сок (англ. list) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза. Экземпляр списка является компьютерной реализацией математического понятия конечной последовательности.
Подробнее: Список (информатика)
Псевдоко́д — компактный (зачастую неформальный) язык описания алгоритмов, использующий ключевые слова императивных языков программирования, но опускающий несущественные подробности и специфический синтаксис. Псевдокод обычно опускает детали, несущественные для понимания алгоритма человеком. Такими несущественными деталями могут быть описания переменных, системно-зависимый код и подпрограммы. Главная цель использования псевдокода — обеспечить понимание алгоритма человеком, сделать описание более воспринимаемым...
Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.
Подробнее: Оператор (программирование)
Кодогенерация — часть процесса компиляции, когда специальная часть компилятора, кодогенератор, конвертирует синтаксически корректную программу в последовательность инструкций, которые могут выполняться на машине. При этом могут применяться различные, в первую очередь машинно-зависимые оптимизации. Часто кодогенератор является общей частью для множества компиляторов. Каждый из них генерирует промежуточный код, который подаётся на вход кодогенератору.
Динамическая идентификация типа данных (англ. run-time type information, run-time type identification, RTTI) — механизм в некоторых языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.
Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералами также называют представление значения некоторого типа данных.
Зарезерви́рованное сло́во (или ключево́е сло́во) — в языках программирования слово, имеющее специальное значение. Идентификаторы с такими именами запрещены.
Анонимная функция в программировании — особый вид функций, которые объявляются в месте использования и не получают уникального идентификатора для доступа к ним. Поддерживаются во многих языках программирования.
Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.
Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
Конте́йнер в программировании — тип, позволяющий инкапсулировать в себе объекты других типов. Контейнеры, в отличие от коллекций, реализуют конкретную структуру данных.
По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».
Подробнее: Сильная и слабая типизация
Область видимости (англ. scope) в программировании — часть программы, в пределах которой идентификатор, объявленный как имя некоторой программной сущности (обычно — переменной, типа данных или функции), остаётся связанным с этой сущностью, то есть позволяет посредством себя обратиться к ней. Говорят, что идентификатор объекта «виден» в определённом месте программы, если в данном месте по нему можно обратиться к данному объекту. За пределами области видимости тот же самый идентификатор может быть...
В теории типов и функциональных языках программирования конструктор алгебраического типа данных или просто конструктор представляет собой функцию с пустым телом, конструирующую объект алгебраического типа данных. Оптимизирующие компиляторы исполняют эти функции статически, т.е. на этапе компиляции.
Подробнее: Конструктор (функциональное программирование)
Абстрактное синтаксическое дерево (АСД) — в информатике конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены (помечены) с операторами языка программирования, а листья — с соответствующими операндами. Таким образом, листья являются пустыми операторами и представляют только переменные и константы.
Логи́ческий тип да́нных, или булев тип, или булевый тип (от англ. Boolean или logical data type) — примитивный тип данных в информатике, принимающий два возможных значения, иногда называемых истиной (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В некоторых языках программирования за значение истина полагается 1, за значение ложь — 0.
Перечисляемый тип (сокращённо перечисле́ние, англ. enumeration, enumerated type) — в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов.
Абстра́ктный тип да́нных (АТД) — это математическая модель для типов данных, где тип данных определяется поведением (семантикой) с точки зрения пользователя данных, а именно в терминах возможных значений, возможных операций над данными этого типа и поведения этих операций.
В императивном программировании
порядок выполнения (порядок исполнения, порядок вычислений) — это способ упорядочения инструкций программы в процессе её выполнения.
Вывод типов (англ. type inference) — в программировании возможность компилятора самому логически вывести тип значения у выражения. Впервые механизм вывода типов был представлен в языке ML, где компилятор всегда выводит наиболее общий полиморфный тип для всякого выражения. Это не только сокращает размер исходного кода и повышает его лаконичность, но и нередко повышает повторное использование кода.
Таблица виртуальных методов (англ. virtual method table, VMT) — координирующая таблица или vtable — механизм, используемый в языках программирования для поддержки динамического соответствия (или метода позднего связывания).
Запись — агрегатный тип данных, инкапсулирующий без сокрытия набор значений различных типов.
Сопоставление с образцом (англ. Pattern matching) — метод анализа и обработки структур данных в языках программирования, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.
В информатике параллели́зм — это свойство систем, при котором несколько вычислений выполняются одновременно, и при этом, возможно, взаимодействуют друг с другом. Вычисления могут выполняться на нескольких ядрах одного чипа с вытесняющим разделением времени потоков на одном процессоре, либо выполняться на физически отдельных процессорах. Для выполнения параллельных вычислений разработаны ряд математических моделей, в том числе сети Петри, исчисление процессов, модели параллельных случайных доступов...
В информатике
лексический анализ («токенизация», от англ. tokenizing) — процесс аналитического разбора входной последовательности символов на распознанные группы — лексемы, с целью получения на выходе идентифицированных последовательностей, называемых «токенами» (подобно группировке букв в словах). В простых случаях понятия «лексема» и «токен» идентичны, но более сложные токенизаторы дополнительно классифицируют лексемы по различным типам («идентификатор, оператор», «часть речи» и т. п.). Лексический...
Логика разделения , сепарационная логика (англ. separation logic) в информатике — формальная система, предназначенная для верификации программ, содержащих изменяемые структуры данных и указатели, расширение логики Хоара. Разработана Джоном Рейнольдсом (англ. John C. Reynolds), Питером О’Хирном (англ. Peter O'Hearn), Самином Иштиаком (англ. Samin Ishtiaq) и Хонсёком Яном (англ. Hongseok Yang) на основе работ Рода Бёрстола (англ. Rod Burstall). Язык утверждений логики разделения является специальным...
Ссылочная прозрачность и ссылочная непрозрачность — это свойства частей компьютерных программ. Выражение называется ссылочно прозрачным, если его можно заменить соответствующим значением без изменения поведения программы. В результате вычисления ссылочно прозрачной функции дает одно и то же значение для одних и тех же аргументов. Такие функции называются чистыми функциями.
Стратегия вычисления (англ. evaluation strategy) — правила семантики языка программирования, определяющие, когда следует вычислять аргументы функции (метода, операции, отношения), и какие значения следует передавать. Например, стратегия «вызов-при-упоминании/передача-по-ссылке» (call-by-worth/pass-by-reference) диктует, что аргументы должны быть вычислены перед выполнением тела вызываемой функции, и что ей должны быть предоставлены две возможности в отношении каждого аргумента: чтение текущего значения...
Дестру́ктор — специальный метод класса, служащий для деинициализации объекта (например освобождения памяти).
Упоминания в литературе (продолжение)
Принцип эмерджентости. Служит продолжением принципа оптимальности и выражает
следующее важное свойство системы: чем больше размеры исследуемой логистической системы и чем значительнее различие в размерах между частью и целым, тем, как правило, больше вероятность того, что свойства целого могут сильно отличаться от свойств отдельных частей системы.
Набор для выживания задает крепкую основу для движения вперед в нашем путешествии по системному ландшафту. По мере продолжения обсуждения читатель обнаружит в этой книге, что одним из главных преимуществ от умения мыслить и действовать на
языке систем является потенциал для новой изобретательности (фантазии), который возникает благодаря пониманию взаимозависимостей между множеством систем и возможностей, которые появляются при объединении систем в одну новую системную идею.
В соответствии с другим подходом строится график с нанесением на него соответствующих величин и проводят линию по средине между точками с продолжением ее за пределы базового участка (графический метод). В случае с прямолинейным расположением
точек может быть использован метод натянутой нити. Здесь нить располагают, так чтобы она ближе всего проходила мимо исходных точек.
Эмпирический материал Пиаже позволяет предположить для подстадии 3 продолжение реализации второго этапа парадигмального цикла – 1-D ППМ. Только теперь ребенок «преодолевает границу», что проявляется в способности действовать по «другую» ее сторону. Тем самым, ребенок начинает проявлять интерес к внешнему миру и оперировать объектами за пределами своего тела. За счет возрастающей связности сознания малыши начинают лучше понимать постоянство внешних предметов. Пиаже отмечает факт «наслаждения новыми возможностями». Новый уровень сознания и, связанные с этим, новые адаптационные возможности всегда доставляют удовольствие и неизменно вызывают желание испытать и воспроизводить их на практике. С точки зрения логики парадигмального цикла, подстадия 3 в классификации Пиаже соответствует второй половине этапа, описываемого 1-D ППМ, что
может быть представлено как развитие подстадии 2 на внешнюю среду, непосредственно примыкающую к телу ребенка.
Для сторонников комплексных решений также имеется богатый выбор подходящих программ-наблюдателей с
соответствующими возможностями. В качестве примера рассмотрим две из них. Обе программы созданы российскими программистами и относятся к категории условно-бесплатных (Shareware), то есть по истечении определенного интервала времени для продолжения работы с программой следует зарегистрировать используемую копию. Первая программа называется Spylo PC Monitor (автор – Alexei Vylegjanine (Sontrex Software)). Вторая – StatWin (разработка компании Security extensible Research Software (www.sxrsoft.com)).
Мы
можем теперь определить концепт общества как промежуточный результат. Общество – это всеобъемлющая система всех коммуникаций, которые воспроизводят себя аутопойетически через рекурсивную сеть коммуникаций, которые производят новые (и всегда другие) коммуникации. Возникновение подобной системы включает коммуникации, поскольку они только внутренне способны к продолжению. И оно исключает все остальное. Воспроизводство подобной системы, таким образом, требует способности проводить различение между системой и средой. Коммуникации могут признавать коммуникации и отличать их от других обстоятельств, что принадлежат к среде в том смысле, что можно, определенно, совершать коммуникацию о них, но не с ними.
В связи с этим рискну предложить принципиально иную модель. Комплекс изменений, связанный с адаптацией и специализацией структур и форм в эволюционном становлении системы, можно условно назвать горизонтальным, или внутрисистемным направлением эволюции. Наряду с ним, однако, действует и другое – вертикальное направление, связанное с транссистемным устремлением ГЭВ. Направление это – не просто продолжение внутрисистемной эволюции, или выведение её
процессов за пределы системы, как это нередко представляют пишущие о магистральном направлении в эволюционировании. Это процесс, имеющий принципиально иную природу и механику, которые коренятся в неизбывном противоречии между бесконечностью принципа и конечностью форм его воплощения. Под бесконечностью принципа здесь подразумевается трансцендентность вышеперечисленных ГЭВ по отношению к каждой локальной системе, в которой они себя обнаруживают. А эволюционная лестница конечных форм являет прогрессию становящихся и неизменно останавливающихся в развитии дискретных структур, всякий раз ограниченную рамками системной конфигурации. Поскольку всякое горизонтальное эволюционирование – разворачивание системы вширь – обусловлено контекстом взаимодействия со средой (эпигенетической суммой материнских систем), это с неизбежностью умаляет чистоту воплощения принципа в каждой конкретной ситуации, ибо становящиеся формы оказываются не абсолютным выражением устремлений ГЭВ, а компромиссом со средой. Иными словами, в любой эволюционной ситуации возникает нетождество и, соответственно, конфликт между универсальными принципами конфигурирования и наличной конфигурацией. Причина конфликта в том, что наличная конфигурация всегда несёт в себе черты компромисса с активно воздействующей на её формирование средой и с самим материалом эволюционирующей системы.
Аналогичным
образом, для ученого его компьютер, его флешка, его книга конспектов или же его экспериментальные приборы и установки – это продолжение его самого. Потеря этих дополнений – это потеря ученым самого себя, которая может вызвать в нем неимоверные страдания. Субъективность человека продлена и продолжена в мир его вещей-процессов, в мир его социальных отношений.
•
По мере продолжения процесса оцифровки все больше аспектов повседневной жизни, а также все больший объем продукции и услуг становится нематериальным, тем самым извлекая пользу из преимуществ пиринговых систем.
Один из индикаторов масштаба
принятия новой технологии обычными людьми – ее след в массовой культуре. Возможно, фестиваль Bitflm, в котором участвуют фильмы, посвященные биткой-ну, может стать первой ласточкой внедрения криптовалют в массовое сознание. Фильмы, отобранные для фестиваля, по-своему интерпретируют биткойн и рассказывают о его влиянии. Фестиваль впервые прошел в 2013 году и получил продолжение в конце 2014 – начале 2015 года в Берлине (где находится штаб-квартира Bitflm), Сеуле, Буэнос-Айресе, Амстердаме, Рио-де-Жанейро и Кейптауне. Естественно, Bitflm позволяет зрителям голосовать за понравившийся фильм биткойнами. Фестиваль продюсирует компания Bitflm. Другое направление деятельности компании – создание роликов, рекламирующих блокчейн (рис. 2).
5. В проекте не должно
быть элементов, которые в дальнейшем не используются («висящее ружье должно выстрелить»). Все действия должны иметь продолжение. Единственный случай, когда сделанная работа может оказаться выполненной впустую, – меры по защите от рисковых событий. Если событие не состоялось, то и защитные меры не понадобятся, однако эти затраты оправдываются тем, что в противном случае потери были бы недопустимо велики.
Продолжение эксперимента и понижение активности
ресурсов человека позволяет выделить доминанты навыков, в качестве проявления темперамента:
– криволинейный отрезок стены дома строится на продолжении одной из стен, в результате чего стена не замыкается. Арка строится по двум
точкам, одна из которых является окончанием указанной стены, другая задается пользователем с помощью щелчка кнопкой мыши (рис. 1.17, слева).