Слова с двойным значением: определение, примеры употребления. Многократные измерения одной и той же величины одним и тем же способом могут дать разные её значения Примеры многозначных существительных



vote usa (6)

Существует ли способ компиляции для обнаружения / предотвращения дублирования значений в перечислении C / C ++?

Уловка состоит в том, что существует несколько элементов, которые инициализируются явными значениями .

Задний план:

Я унаследовал некоторый код C, например:

#define BASE1_VAL (5 ) #define BASE2_VAL (7 ) typedef enum { MsgFoo1A = BASE1_VAL , // 5 MsgFoo1B , // 6 MsgFoo1C , // 7 MsgFoo1D , // 8 MsgFoo1E , // 9 MsgFoo2A = BASE2_VAL , // Uh oh! 7 again... MsgFoo2B // Uh oh! 8 again... } FOO ;

Проблема заключается в том, что по мере того, как код растет, и поскольку разработчики добавляют больше сообщений в группу MsgFoo1x , в конечном итоге он переполняет BASE2_VAL .

Этот код в конечном итоге будет перенесен на C ++, поэтому, если есть только C ++-решение (магия шаблона?), Это нормально - но решение, которое работает с C и C ++, лучше.

Есть несколько способов проверить это время компиляции, но они могут не всегда работать на вас. Начните с вставки значения маркера «маркер» прямо перед MsgFoo2A.

typedef enum { MsgFoo1A = BASE1_VAL , MsgFoo1B , MsgFoo1C , MsgFoo1D , MsgFoo1E , MARKER_1_DONT_USE , /* Don"t use this value, but leave it here. */ MsgFoo2A = BASE2_VAL , MsgFoo2B } FOO ;

Теперь нам нужен способ гарантировать, что MARKER_1_DONT_USE < BASE2_VAL во время компиляции. Есть два распространенных метода.

Массивы отрицательного размера

Ошибка объявления массива с отрицательным размером. Это выглядит немного уродливо, но это работает.

extern int IGNORE_ENUM_CHECK [ MARKER_1_DONT_USE > BASE2_VAL ? - 1 : 1 ];

Почти каждый компилятор, когда-либо написанный, генерирует ошибку, если MARKER_1_DONT_USE больше, чем BASE_2_VAL. GCC выплевывает:

test . c : 16 : error : size of array ‘ IGNORE_ENUM_CHECK ’ is negative

Статические утверждения

Если ваш компилятор поддерживает C11, вы можете использовать _Static_assert . Поддержка C11 не является вездесущей, но ваш компилятор может поддерживать _Static_assert любом случае, тем более, что соответствующая функция на C ++ широко поддерживается.

_Static_assert (MARKER_1_DONT_USE < BASE2_VAL , "Enum values overlap." );

GCC выдает следующее сообщение:

test . c : 16 : 1 : error : static assertion failed : "Enum values overlap." _Static_assert (MARKER_1_DONT_USE < BASE2_VAL , "Enum values overlap." ); ^

Другой подход может состоять в том, чтобы использовать что-то вроде gccxml (или более удобно pygccxml) для идентификации кандидатов для ручного осмотра.

Я ничего не знаю о том, что будет автоматически проверять всех членов перечисления, но если вы хотите проверить, что будущие изменения в инициализаторах (или макросы, на которые они полагаются) не вызывают конфликтов:

switch (0 ) { case MsgFoo1A : break ; case MsgFoo1B : break ; case MsgFoo1C : break ; case MsgFoo1D : break ; case MsgFoo1E : break ; case MsgFoo2A : break ; case MsgFoo2B : break ; }

приведет к ошибке компилятора, если какое-либо из интегральных значений будет повторно использовано, и большинство компиляторов даже скажут вам, какое значение (числовое значение) было проблемой.

Я не верю, что есть способ обнаружить это с самим языком, учитывая, что существуют мыслимые случаи, когда вы хотите, чтобы два значения перечисления были одинаковыми. Тем не менее, вы всегда можете убедиться, что все явно заданные элементы находятся в верхней части списка:

typedef enum { MsgFoo1A = BASE1_VAL , // 5 MsgFoo2A = BASE2_VAL , // 7 MsgFoo1B , // 8 MsgFoo1C , // 9 MsgFoo1D , // 10 MsgFoo1E , // 11 MsgFoo2B // 12 } FOO ;

Пока назначенные значения находятся наверху, столкновения не происходит, если по какой-то причине макросы не расширяются до значений, которые являются одинаковыми.

Обычно эта проблема преодолевается путем предоставления фиксированного количества бит для каждой группы MsgFooX и обеспечения того, чтобы каждая группа не переполняла, она выделяет количество бит. Решение «Количество бит» хорошо, потому что позволяет поразрядному тестированию определить, к какой группе сообщений что-то принадлежит. Но для этого нет встроенной функции языка, потому что есть законные случаи для перечисления, имеющего два одинаковых значения:

typedef enum { gray = 4 , //Gry should be the same grey = 4 , color = 5 , //Also makes sense in some cases couleur = 5 } FOO ;

Хотя у нас нет полной рефлексии, вы можете решить эту проблему, если вы можете восстановить значения перечисления.

Где-то это объявлено:

enum E { A = 0 , B = 0 };

в другом месте мы строим этот механизм:

template < typename S , S s0 , S ... s > struct first_not_same_as_rest : std :: true_type {}; template < typename S , S s0 , S s1 , S ... s > struct first_not_same_as_rest : std :: integral_constant < bool , (s0 != s1 ) && first_not_same_as_rest < S , s0 , s ... >:: value > {}; template < typename S , S ... s > struct is_distinct : std :: true_type {}; template < typename S , S s0 , S ... s > struct is_distinct : std :: integral_constant < bool , std :: is_distinct < S , s ...>:: value && first_not_same_as_rest < S , s0 , s ... >:: value > {};

Когда у вас есть это оборудование (для которого требуется C ++ 11), мы можем сделать следующее:

static_assert ( is_distinct < E , A , B >:: value , "duplicate values in E detected" );

и во время компиляции мы гарантируем, что нет двух элементов.

Это требует O (n) глубины рекурсии, а O (n ^ 2) работает компилятором во время компиляции, поэтому для чрезвычайно больших перечислений это может вызвать проблемы. AO (lg (n)) и O (n lg (n)) работают с гораздо большим постоянным коэффициентом, можно сделать, сначала отсортировав список элементов, но это намного больше.

С кодом преобразования enum, предложенным для C ++ 1y-C ++ 17, это будет выполнимо без повторения элементов.

Мне не понравился ни один из ответов, уже опубликованных здесь, но они дали мне несколько идей. Важнейшим методом является использование ответа Бена Войт на использование оператора switch. Если несколько случаев в коммутаторе имеют один и тот же номер, вы получите ошибку компиляции.

Самое полезное для меня и, возможно, для оригинального плаката, это не требует каких-либо возможностей C ++.

Чтобы очистить вещи, я использовал ответ aaronps: Как я могу избежать повторения себя при создании перечня C ++ и зависимой структуры данных?

Сначала определите это в некотором заголовке где-нибудь:

#define DEFINE_ENUM_VALUE (name , value ) name = value , #define CHECK_ENUM_VALUE (name , value ) case name : #define DEFINE_ENUM (enum_name , enum_values ) \ typedef enum { enum_values (DEFINE_ENUM_VALUE ) } enum_name ; #define CHECK_ENUM (enum_name , enum_values ) \ void enum_name ## _test (void) { switch(0) { enum_values(CHECK_ENUM_VALUE); } }

Теперь, когда вам нужно иметь перечисление:

#define COLOR_VALUES (GEN ) \ GEN (Red , 1 ) \ GEN (Green , 2 ) \ GEN (Blue , 2 )

Наконец, эти строки необходимы для фактического перечисления:

DEFINE_ENUM (Color , COLOR_VALUES ) CHECK_ENUM (Color , COLOR_VALUES )

DEFINE_ENUM создает тип данных перечисления. CHECK_ENUM выполняет функцию тестирования, которая включает все значения перечисления. Компилятор будет сбой при компиляции CHECK_ENUM если у вас есть дубликаты.

Проанализируем сложившуюся ситуацию.

Сначала выясним, почему разные способы измерения одной и той же высоты привели к разным результатам.

На первый взгляд, первый способ является самым надёжным. Мы прикладываем ленту рулетки к поверхности здания и определяем искомую высоту. Более внимательный анализ показывает, что это не совсем так. Оказывается, здание имеет небольшой наклон, а стена в том месте, где производятся замеры, имеет определённую кривизну – она является выпуклой, причём в сторону улицы. Это означает, что мы измеряли не высоту здания, а длину стены, связанную с высотой.

Второй способ представляет собой косвенное измерение. Измерив время падения шарика, мы рассчитываем высоту по известной формуле для свободного падения: h = gt 2 /2. На этот раз измерение действительно касается высоты. Но, мы забыли о том, что шарик движется в воздухе и, следовательно, испытывает сопротивление среды. Поэтому рассчитанная по формуле величина также не является истинным значением высоты здания.

Третье измерение, как и второе, является косвенным. Высота определяется из геометрических соображений: в прямоугольном треугольнике длина противолежащего катета равна произведению длины прилежащего катета на тангенс угла. В нашем случае высота играет роль одного катета, а расстояние от лазера до здания – роль другого. На этот раз нас подвело предположение об идеально горизонтальной поверхности, на которой стоит здание. Результат – опять измерили величину, которая не является высотой, но теперь по другой причине.

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

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



Наш анализ вызывает закономерные вопросы:

1. Что такое «истинное» значение измеряемой величины?

2. Как представлять результаты измерений с учётом погрешностей?

Поскольку эти вопросы касаются не только рассмотренного примера, но

и любых других измерений, мы перейдём к обобщениям и выработке общих рекомендаций.

Приведённый конкретный пример продемонстрировал общее свойство, характерное для любых измерений, – любое измерение сопровождается погрешностями .

Это свойство, в конечном счёте, обусловлено тем, что всякое измерение предполагает определённую взаимосвязанную цепочку участников процедуры измерения: наблюдатель – измерительный прибор – анализируемый объект – «внешняя среда».

Элементы этой цепочки связаны огромным количеством взаимодействий и движений. В процессе измерения анализируемый объект, измерительный прибор и наблюдатель могут быть подвержены различным влияниям (в том числе и взаимным), что и сказывается на результате измерений.

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



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

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

Не редкость в русском языке. Очень часто одним и тем же словом можно назвать и/или охарактеризовать совершенно разные предметы или явления. Подобные слова имеют одно основное значение - изначальное, буквальное, и одно (или более) - переносное, фигуральное, метафорическое. Последнее, обычно, возникает на основе какого-либо признака, схожести, ассоциации.

Примеры многозначных существительных

Среди существительных можно найти очень много примеров слов с двойным значением. Вот лишь некоторые из них:

Слово Прямое значение Переносное значение
Билет Билет на самолет или поезд, билет в театр или в кино. Экзаменационный билет.
Гребень Инструмент для расчесывания волос, расческа. Гребень волны или горы.
Слово Речевая единица. Литературный жанр. Например, "Слово о полку Игореве".
Рука Часть тела - правая рука, левая рука.
  • Должность, положение человека - "Он моя правая рука".
  • "Почерк", манера исполнения, узнаваемый авторский штрих - "рука великого художника".
  • Физическая сила - "тяжелая рука".
Кисть Кисть руки - часть тела от запястья до кончиков пальцев. Инструмент для рисования красками.
Работа Физический труд, усилие, род занятий человека. Видимый результат физического труда - "Хорошая работа!".
Лист Лист, растущий на дереве. Лист бумаги, тетрадный или альбомный лист.
Корень Корень дерева. Часть дерева, которая находится под землей.
  • Математический корень из числа. Например, корень числа 4 - это 2.
  • Причина какого-то явления или события - "корень зла", "корень проблем".
Долг Денежная сумма или материальная ценность, обещанная одним человеком другому, результат заимствования. Нравственное стремление к чему-либо, моральный долг.

Это далеко не весь список. Составить весь, наверное, просто невозможно, ведь слов с двойным значением в русском языке почти так же много, как и однозначных.

Примеры многозначных прилагательных

Разные предметы одним словом можно не только назвать, но и охарактеризовать. Вот несколько примеров таких слов:

Слово Прямое значение Переносное значение
Стальной Изготовленный из стали. Например, стальной нож. Очень крепкий, непоколебимый - "стальные нервы".
Золотой Сделанный из золота - "золотые серьги", "золотое колье". Очень ценный, добрый, обладающий выдающимися моральными качествами - "золотой человек", "золотой ребенок", "золотое сердце".
Тяжелый Отнимающий большое количество физических усилий - "тяжелая работа". О чем-то, что трудно терпеть окружающим - "тяжелый человек", "тяжелый характер".
Белый Белого цвета - "белый снег", "белый лист". Стихотворение без рифмы - "белый стих".
Черный Черного цвета - "черные глаза", "черный маркер". Злой, саркастичный, затрагивающий щекотливые темы в грубой форме - "черный юмор", "черная комедия".

Опять-таки, список неполный. Кроме того, к перечню слов с двойным значением можно отнести прилагательные, описывающие одновременно цвета, запахи и/или вкусы: апельсиновый, малиновый, лимонный, сливовый и так далее.

Примеры многозначных глаголов

Слова-действия тоже могут иметь более одного значения:

Слово Прямое значение Переносное значение
Садиться Садиться на стул, в кресло, на лошадь. Садиться на поезд (не в прямом смысле садиться на крышу поезда, а в переносном - занимать в нем свое место).
Сойти/сходить Можно сойти с поезда, сойти на нужной остановке, сходить в магазин. "Сойти/сходить с ума".
Бить Наносить удары. "Родник бьет фонтаном", "жизнь бьет ключом".
Резать Разделять на куски с помощью ножа или другого острого лезвия. Вызывать неприятное ощущение - "свет режет глаза", "звук режет слух".

Чаще всего, слова с двойным значением - это слова исконно русские. У заимствованных терминов значение, как правило, одно.

Отличия от омонимов

Очень важно отличать слова с двойным значением от омонимов: разных слов, которые пишутся одинаково. У многозначных слов есть прямое, основное значение, и перенесенное по какому-либо признаку. У омонимов все значения самостоятельны. "ручка" (дверная) и "ручка" (пишущая) - это омонимы, так как между ними нет связи. А вот слово "спутник" многозначное - небесное тело назвали "спутником", потому что оно движется вокруг планеты, подобно спутнику-человеку.

Из самого определения знака уже ясно, что основной его характеристикой является присущая ему репрезентативная функция: быть представителем, или заместителем, в данном языке какого-либо (определенного) объекта. И это – значение знака. Значением словесных знаков могут быть объекты в широком смысле слова – все, что может быть как-то выделено и названо, о чем что-либо утверждается или отрицается. Следует обратить внимание на то, что в качестве значений выступают, прежде всего, объекты внеязыковой действительности – природной и социальной. Другой существенной характеристикой словесного знака является его смысл.Смысл языкового выражения –это связанная с ним словесная оформленная информация, которая позволяет выделить представляемый им объект (или множество однотипных объектов) среди других объектов. Например, смысл слова «Луна» – в обычном его употреблении – может составлять такая ее характеристика как «естественный спутник Земли»; смысл предложения немецкого языка «DerSchneeistwei» в русском языке воспроизводится предложением «Снег бел»; смысл слова «кража» – «тайное хищение чужого имущества» и т.п.

Отметим, что для одного и того же объекта (или множества объектов) возможны различные выделяющие характеристики. Это значит, что два различных выражения могут иметь различные смыслы, но одно и то же значение, например, «равноугольный треугольник» и «равносторонний треугольник». Слова (или словосочетания) с одним и тем же значением называют равнозначными .Кроме того, одно и то же слово может иметь несколько значений и, следовательно, выражать разные понятия (смыслы). Такое явление называютмногозначностью . Многозначность слов неуместна в научном и профессиональном общении.

Смысл представляет собой связующее звено между словом и обозначаемым им объектом. Придание смысла некоторому языковому выражению является важным логическим способом введения новых терминов в язык и уточнения значений уже имеющихся в нем слов.

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

Относительно смысла и значения в логике принято считать, что значение знака есть функция его смысла. Этим подчеркивается особая роль смысла: он однозначно указывает на объект, обозначаемый знаком, мысленно выделяя его из множества других.

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

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

К первому типу объектов будут относиться единичные предметы. Единичными предметами мы будем считать такие объекты познания, каждый из которых имеет индивидуальное отличие от однотипных с ним объектов: число 7, бракосочетание А.С. Пушкина, Луна и т.п. Соответствующая единичным предметам логическая категория языковых выражений – единичные имена. Ихсмыслом является связанная с ними информация, позволяющая однозначным образом выделить этот единичный предмет из множества однотипных с ним предметов. Примеры таких имен: «Петр 1», «Нынешний президент РФ», «Автор романа «Евгений Онегин», «Празднование 66-ой годовщины со Дня Победы над фашистской Германией» и т.п. Единичные имена подразделяются на описательные (сложные) и на неописательные (простые) имена. Примерами простых (неописательных) имен являются слова «Эверест», «Ю.А. Гагарин», примерами сложных (описательных) имен – «Первый летчик-космонавт», «Самая большая река в Европе».

Второй тип объектов – это свойства предметов и отношения между ними. Выражения, представляющие в языке такого рода объекты, мы назовем универсалиями . Примеры универсалий: слово «стол» в высказывании «Этот стол – круглый»; слово «брат» в выскзывании «Иван брат Петра»; слово «преступление» в высказывании «Кража является преступлением». Универсалия характеризуется тем, что может выполнять в предложении двоякую роль: 1) составлять часть логического «сказуемого», т.е. представлять приписываемое предметам какое-либо свойство либо отношение, как в примере «Этот стол – круглый »; в этой функции универсалии будем называть предикатами; 2)быть логическим «подлежащим», т.е. представлять в высказывании произвольно взятый предмет некоторого множества однотипных предметов, каждый из которых имеет соответствующее свойство, как в примере «Любое преступление опасно для общества». Такие универсалии будем называть субъектами.

Третий тип объектов составляют ситуации (положения вещей) . Соответствующую ситуациям логическую категорию языковых выражений составляютповествовательные предложения. Например, наличие ситуации впадения Волги в Каспийское море воспроизводится в предложении «Волга впадает в Каспийское море», а ситуации равенства суммы углов треугольника 180 ° – в предложении «Сумма углов треугольника равна 2d» и т.п. Ситуации могут быть простыми либо сложными – в зависимости от того, являются ли простыми либо сложными представляющие их предложения. Примеры сложных предложений и, соответственно, ситуаций: «Если число делится на 6, то оно делится на 2»; «Ян и его отец находились в это время дома».

Смысл предложения составляет суждение. Отличие суждения от предложения (как знаковой формы суждения) можно усмотреть, когда мы сравниваем два предложения, являющихся правильными переводами с одного естественного языка на другой: знаковые структуры разные, а смысл их – один и тот же. Смысл предложения и есть суждение. Поскольку речь у нас идет о логическом анализе языка, значением предложения считается какой-либо один из абстрактных объектов истина либо ложь. Так, высказывание «Волга впадает в Каспийское море» обозначает истину (поскольку это предложение воспроизводит ситуацию, имеющую место в действительности), а высказывание «Волга впадает в Черное море» – ложь, (поскольку не соответствует действительности).

Каждая наука имеет специфические для нее термины. Можно говорить о математических терминах: «число», «геометрическая фигура», «множество»; существуют физические термины, такие как «масса», «элементарная частица», «электрический заряд»; в биологии фигурируют термины «клетка», «организм», «наследственность»; в медицине – «симптом», «синдром», «болезнь»; в юриспруденции – «правовая норма», «преступление», «кража». Эти выражения составляют категорию дескриптивных терминов (лат. дескрипция – описание), за каждым из которых стоит конкретный объект, какое-либо свойство или множество однотипных предметов, и т. п. В нашем анализе дескриптивными терминами являются имена и универсалии.

В языке любой науки кроме дескриптивных терминов, характеризующих объекты ее собственной предметной области, употребляются выражения, которые используются во всех науках. К ним относятся некоторые из частиц и союзов, такие как «и», «или», «если, то», «неверно, что», «тогда, и только тогда». С помощью этих терминов из простых высказываний (суждений) образуются сложные (составные). В эту же группу «междисциплинарных» терминов входят выражения «есть» («суть»), «все» («каждый»), «некоторые» («существуют»), «не», с помощью которых строятся простые единичные и множественные (общие и частные) суждения.Они составляют категорию логических терминов (логических констант).

Без логических терминов не может быть выражено ни одно суждение. Они определяют их предельно общую структурулогическую форму , с ними связаны логические отношения и законы логики. Некоторые из этих терминов иногда опускаются в целях краткости речи, как, например, в высказывании «Человек – смертен». При логическом анализе суждений мы обязаны восстановить все эти «пропуски», что позволяет уточнить их логическое содержание, решить вопрос об их истинности или ложности. В частности, приведенное только что высказывание примет такой вид: «Все люди суть смертны». И хотя после такой реконструкции и восполнения эти предложения иногда становятся несколько неуклюжими, мысли, выражаемые ими, приобретают ясность и определенность.