Плюс на минус получается плюс: «Почему минус на минус даёт плюс ?» — Яндекс Кью

Содержание

Сюрпризы унарного минуса | GeekBrains

https://gbcdn.mrgcdn.ru/uploads/post/1119/og_cover_image/aaa2e95494b95c589791c172a4a4a4c9

Другие статьи из серии «Конспекты начинающего программиста»:

  • Как я поборол рекурсию: учебный детектив;
  • Опциональные типы данных в языке Swift;
  • Кортежи (tuples) в Swift;
  • Моделирование объектов в Swift.

Небольшая предыстория

При изучении темы «Операторы» унарные операторы обычно рассматриваются в начале или где-то бегло по ходу, поскольку они вроде простые и излагать там особо нечего. В данном же случае обнаружились некоторые сюрпризы, о которых не говорится в учебнике по Swift. Поэтому представляется удобным выделить их в отдельный текст.

Всё началось с того, что захотелось вживую в XCode прописать примеры из учебника. И вот что из этого вышло.

Что такое унарный минус?

Для начала напомним, что такое унарный минус, а точнее — что о нём говорится в учебнике. Унарный минус — это унарный оператор, который служит для изменения знака числового значения.

Пример 1: Каждый раз новые константы

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

let three = 3

let minusThree = -three // minusThree равно -3

let plusThree = -minusThree // plusThree равно 3, т. е. "минус минус три"

 

Всё красиво и вроде понятно. Берём константу с числовым положительным значением, присваиваем ей унарный минус, получается отрицательное число. Далее, добавляем ещё один унарный минус и получаем снова плюс, т.е. по известному из арифметики правилу — минус на минус, получаем плюс.

Но есть одна особенность в этом примере, а именно — на каждом шаге объявляется новая константа! Вроде бы ничего такого, но, наверное, авторы учебника что-то знали! И решили пока не загружать умы учеников сложной информацией.  Но ученики тоже, бывает, замечают, что что-то не вписывается в гладкую последовательность изложения.

Пример 2: Меняем знак на одной и той же переменной

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

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1

Пока всё идёт в штатном режиме. Но если попробуем пойти дальше и ещё раз сменим знак, то получим сюрприз:

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1
  3. -a // Переменная а равна -1

Т.е. второго изменения знака — с минуса на плюс — не происходит! Правило «минус на минус даёт плюс» в данном случае не срабатывает! 

Почему это происходит?

Гипотез было несколько. Первая уже названа: что в первом примере на каждое применение унарного минуса создавалась новая константа, а во втором примере унарный минус использовался на одной и той же переменной. Но что потом делать с этой гипотезой не понятно, потому что она просто закрывает все дальнейшие вопросы, ничего не объясняя.

Вторая гипотеза: унарный минус действует только один раз, а второе его применение использует значение не из предыдущей строки, а из строки, где переменная объявляется. Кстати, если продолжать ставить минусы, то значение не меняется, везде будет минус 1. Это тоже такая гипотеза методом «научного тыка»: а вдруг что-то произойдет, если ставить минусы дальше? Не происходит!

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

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1
  3. -a // Переменная а равна -1
  4. -a // Переменная а равна -1
  5. a // Переменная а равна 1

И снова сюрприз: мы-то ожидали, что значение переменной изменилось во 2-й строке (а потом и в 3-й, и в 4-й), что оно теперь минус один, а на самом деле оно просто один, без минуса! И опять непонятно почему это происходит?

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

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

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1
  3. -a // Переменная а равна -1
  4. -a // Переменная а равна -1
  5. a // Переменная а равна 1
  6. //--a //  XCode выдает ошибку ‘--‘ is unavailable: it has been removed in Swift 3

Ничего не получилось. Но хотя бы по ходу узнаём, что двойные минусы совсем удалены в третьем Swift. Т.е. получаем облом, который толкает на следующую авантюру: а что если взять переменную с первым минусом в скобки, типа соорудить конструкцию похожую на логическую — «минус на минус…».

Делаем (см. строку 7):

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1
  3. -a // Переменная а равна -1
  4. -a // Переменная а равна -1
  5. a // Переменная а равна 1
  6. //--a //  XCode выдает ошибку ‘--‘ is unavailable: it has been removed in Swift 3
  7. -(-a) // Переменная а равна 1

Бинго!

Мы своего добились! Применили два минуса и на выходе получили плюс! На всякий случай для страховки проверяем, т.е. указываем просто переменную a:

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1
  3. -a // Переменная а равна -1
  4. -a // Переменная а равна -1
  5. a // Переменная а равна 1
  6. //--a //  XCode выдает ошибку ‘--‘ is unavailable: it has been removed in Swift 3
  7. -(-a) // Переменная а равна 1
  8. a // Переменная а равна 1

Отлично! Всё сохраняется, значение нашей переменной снова положительное.  Вопросы конечно оставались: почему унарный минус так себя ведёт? Единственное объяснение: он почему-то действует только тогда, когда  применяется, но само изменённое значение дальше не сохраняется.

Пример 3. Гештальт

И вот, как это часто бывает, долгие раздумья над каким-то вопросом вдруг приводят к новому повороту. Как говорится, гештальт созрел. Сначала была мысль, что один и тот же знак, минус, используется и как унарный оператор, и как бинарный арифметический. Разница только в синтаксисе: бинарному нужны 2 операнда и он пишется с пробелами, унарному нужен только один операнд и он пишется без пробела от операнда.

Затем настойчивые мысли о том, почему значение не сохраняется, вывели на оператор присвоения. Т.е. унарный минус значение меняет, но оно не сохраняется, т.е. оно НЕ ПРИСВАИВАЕТСЯ переменной! Отсюда логично напрашивается использовать оператор присвоения.

Тут же вспоминаются бинарные составные операторы, где используются знаки минуса и плюса и знак присвоения (=). Но это не совсем то, потому как здесь минус и плюс используются именно как бинарные арифметические операторы. Но направление мысли они задают, как оказалось, правильное. А именно — попробовать не только изменить знак числа, но и присвоить это изменённое значение переменной.

Делаем простой развёрнутый пример со сменой знака и сразу же проверяем текущее значение переменной (9-я и 10-я строки):

  1. var a = 1 // Переменная а равна 1
  2. -a // Переменная а равна -1
  3. -a // Переменная а равна -1
  4. -a // Переменная а равна -1
  5. a // Переменная а равна 1
  6. //--a //  XCode выдает ошибку ‘--‘ is unavailable: it has been removed in Swift 3
  7. -(-a) // Переменная а равна 1
  8. a // Переменная а равна 1
  9. a = -a // Переменная а равна минус 1
  10.  a // Переменная а равна минус 1

Ура ещё раз!

Значение переменной изменилось в 9-й строке, а в 10-й видно, что оно сохранилось! Т. е. впервые, когда мы просто указываем название переменной, её значение в строке 10 отличается от значения в первой строке!

Ещё раз подчеркнём: раньше по ходу примера, когда просто указывалось название переменной, то её значение всегда было таким, как и в первой строке, т.е. единица. А в 10-й строке мы впервые получаем при той же записи другое значение — единицу в минусе.

Таким образом, приходим к выводу, что эта последняя гипотеза правильная. А именно — унарный минус только меняет значение с плюса на минус, но он это новое значение автоматически не сохраняет, не присваивает переменной. Чтобы сохранить новое значение надо специально использовать оператор присвоения.

И кстати, с этой точки зрения можно заметить, что в 8-й строке мы не можем утверждать, что новое значение переменной сохранилось, как мы радовались этому немного ранее. Скорее всего в этой строке показывалось не изменённое с плюса на минус и потом с минуса на плюс значение переменной, а всё то же значение из первой строки. Т.е. все предыдущие изменения знака в переменной не сохранялись, потому что не использовался оператор присвоения. И только когда мы используем оператор присвоения, только тогда изменённое значение сохраняется и число в переменной остаётся с другим знаком.

Резюме по унарному минусу

В ходе своего учебного расследования 🙂 мы выяснили как минимум 3 вещи:

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

-(-a)

 

Не берусь судить, бывают ли такие ситуации, когда такое нужно сделать, но в программировании всякое возможно. Так что пусть будет, может когда и пригодится.

  • Унарный минус меняет знак числа в переменной, но новое измененное значение не сохраняется. Оно существует только в момент применения унарного минуса. А дальше по ходу программы будет использоваться исходное значение переменной до применения унарного минуса.

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

Это можно сделать либо способом, где изменённое значение присваивается той же переменной:

a = -a

 

либо так, как показано в учебнике, т.е. присваивая изменённые значения новым переменным / константам:

let three = 3

let minusThree = -three // minusThree равно -3

let plusThree = -minusThree // plusThree равно 3, т. е. "минус минус три"

 

Пару слов об унарном плюсе

Об унарном плюсе говорить действительно почти нечего. Он просто возвращает исходное значение без изменений. Например:

var b = -20 // Переменная b равна минус 20

+b // Переменная b равна минус 20

var c = 30 // Переменная c равна 30

+c // Переменная c равна 30

 

Как сказано в учебнике: хотя оператор унарного плюса не выполняет никаких действий, он придаёт коду единообразие, позволяя зрительно отличать положительные значения от отрицательных. Но что-то мне сдаётся по типу нововведений в Swift 3, что потом с этим унарным плюсом может что-то и произойти для единообразия.

Унарный логический оператор

Унарный логический оператор в учебнике рассматривается в разделе «Логические операторы». С одной стороны это логично, с другой — не очень, поскольку вначале задана классификация на унарные, бинарные и тернарный операторы, а потом она нарушается.  Поэтому здесь пробуем расположить унарный логический оператор в разделе именно «Унарные операторы» в соответствии с заданной в начале главы классификацией.

Итак, есть один унарный логический оператор. Его полное название — оператор логического НЕ. Обозначается этот оператор восклицательным знаком — !.

Его действие: он изменяет, инвертирует значение логической переменной с true на false или с false на true.

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

  1. var k = true // Переменная k есть true
  2. !k // Переменная k есть false

В учебнике предлагается описывать действие унарного оператора логического НЕ как «не есть такая-то переменная». Отсюда, в нашем примере смысл второй строки можно описать так: «!k не есть переменная k». Или так — «значение !k не есть истинное значение переменной k, оно фальшивое, ненастоящее».

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

Т.е. если мы попытаемся ещё раз изменить значение переменной с false на true, то у нас ничего не получится.

  1. var k = true // Переменная k есть true
  2. !k // Переменная k есть false
  3. !k // Переменная k есть false

Чтобы поменять значение переменной второй раз, т.е. от false перейти к true, нужно использовать круглые скобки:

  1. var k = true // Переменная k есть true
  2. !k // Переменная k есть false
  3. !k // Переменная k есть false
  4. !(!k) // Переменная k есть true

А если мы хотим не только изменить значение логической переменной на противоположное, но ещё и сохранить его, то нам нужно изменённое значение присвоить или той же переменной, или новой (см. строки с 5-ой по 8-ю):

  1. var k = true // Переменная k есть true
  2. !k // Переменная k есть false
  3. !k // Переменная k есть false
  4. !(!k) // Переменная k есть true
  5. k = !k // Переменная k есть false, измененное значение сохранено
  6. k // Проверка. Результат - переменная k есть false
  7. var l = !k // Переменная k есть true и это значение присвоено новой переменной l
  8. l // Проверка. Результат - переменная l есть true

Ещё одно интересное наблюдение: унарный логический оператор также можно использовать не только по отношению к переменной, но и по отношению к голому значению. Т.е. также, как мы можем к 2 добавить минус и получить -2, так и к булевым значениям мы можем применять логический унарный оператор и изменять его на противоположное. Например:

true // Песочника показывает true

!true // Песочница показывает false

 

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

Помнится раньше в Swift были и постфиксные операторы, но сейчас, начиная с версии 3, их уже похоже нет. И хотя в информации об обновлениях об этом прямо не сказано, но если попытаться поставить ! после переменной, то выдаёт ошибку, что не может сделать force unwrap, поскольку переменная с логическом типом данных не содержит опционального значения. Т.е. скорее всего, постфиксный  восклицательный знак отдан под опционалы.

В принципе всё логично, постфиксные операторы как-то выбивались из общего строя. Теперь без них будет проще: есть префиксные и всё понятно и единообразно. А вы как считаете?

 

Вопросы «Плюс-Минус» и «Минус-Плюс» (вопросы с хвостиком)

Официальный сайт автора данного курса лекций: https://eng-professor.ru/

Внимание, friends, краткое, но очень важное правительственное сообщение. Сейчас мы с вами урок проведем немножко не так, как уже привыкли. Retman’а мы сегодня не читаем, по понятным причинам. Новый Retman нас всё время подгоняет. И он уже в шестом своем уроке уже дает грамматику, которую мы пока еще с вами не знаем. Значит, пусть ждет. Но это даже на пользу, потому что у нас накопилось несколько позиций, которые мы пометили себе, а сделать еще не сделали. Так вот сейчас мы сделаем, как сказано в Библии: «Время камни раскидывать и время камни собирать». Сегодня мы собираем камни. 

Первое, что мы сделаем. Кстати, приготовьте неправильные глаголы, сегодня не уйдем пока не прочитаем их. Вспомните пятый урок Retman’а, да даже это было и в 4-ом тоже: «And those girls and boys are their children, aren’t they?». Помните, мы его себе пометили, и сказали, что это еще одни новый тип вопроса? И мы его как себе назвали? Плюс-минус. Это очень важно. Сейчас мы это должны с вами взять. 

Вопросы типа «Плюс-Минус» и «Минус-Плюс» (вопросы с хвостиком) 

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

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

В Англии, особенно в Англии, да и в Америке тоже, вы будете злейшим врагом человека, если вы, начав с ним общаться, будете высказывать свое мнение безапелляционно в виде диктата. Как мы это иногда любим: «Ну, это же вот так. Что дурак, не понимаешь что ли?».  Мы же говорим так часто. Мы же считаем, что в мире всего два мнения: свое и чужое неправильное. Понимаете, что я хочу сказать? На Западе это категорически запрещенный прием. Они там все личности. Все. Они себя очень любят. Мы с вами говорили, что местоимение I с большой буквы. Но что самое главное, они вольно-невольно, искренне/неискренне не знаю, но уважают соседа, собеседника. И вот для этого колоссально полезны эти вопросы. То есть, по большому счету, вот это вот как бы ваш пропуск в высокое общество, где сами так говорят. Как только вы начинаете такими грамматическими вещами пользоваться – всё, для них вы интеллигентные люди, а для них это очень важно. Помните ли вы, по-другому задам вопрос, читали ли вы Бернарда Шоу «Пигмалион»? Вспомните, какой первой фразе профессор Пикеринг научил Элизу Дулиттл – девчонку с улицы, с подворотни практически, чтобы ее вывести в солидное общество, к дворянам? Какой фразе? «Прекрасная погода сегодня, не правда ли?». Вот это оно. А Пикеринг был не дурак, он знал, что если человек такую фразу скажет – всё, дальше можно ничего не говорить, его примут как своего. Еще раз вам говорю, для них это принципиально важно, они на этом строят всю жизнь, особенно Англия. 

Скажу вам то, что никто вам не скажет. Это надо знать. Это страноведение, которое не менее важно, чем язык. Был такой герцог Веллингтон, которые разбил на поле Ватерлоо (Waterloo) Наполеона. И за недели две или три до этой битвы, когда они еще только ехали через Ла-Манш, этот герцог устроил в своем дворце (сейчас это музей в самом центре Лондона, очень красивый) прощальный вечер для своих офицеров, понимая, что не все вернуться, битва-то дикая. И в этот вечер там была сцена, которую очень важно вам знать. Он идет с родственницей короля, с герцогиней тоже, и она ему говорит: «Герцог, вам предстоят ужасные события». Он: «Да, миледи». Она говорит: «Бонапарт великий полководец». Он: «Да, миледи. Одна его серая треуголка стоит пяти наших дивизий». То есть, он только появляется на холме на битве – всё, как будто пять дивизий уже наших сложили оружие. Она говорит: «Так как же вы себе представляете победить его?». И он произносит фразу: «Мадам, не забывайте, Бонапарт – не джентльмен». Понятно? Он всё равно никто. Джентльмен побьет не джентльмена всегда по определению. Вот как у них мысли работают.   

Ладно, Бог с ним. Это все было очень давно, можете считать, что это было неправдой, хотя это истинная правда. Я вам про себя лично расскажу. В первый самый мой приезд в Лондон, нас учили языку. Делали вид, конечно. Там никакого языка не было, я с содроганием сейчас это вспоминаю. Сидит вот так вот пеньком преподаватель, нас разделил по два-три человека за столики и говорит: «Разговаривайте, вот вам тема». Одному – тема, второму – тема, третьему столику – тема. И мы пытаемся разговаривать. И я сижу в углу с парнем, парень из Севастопольского института, очень своеобразный. Как раз из тех, которые считают, что  мнений всего два: свое собственное и остальное неправильное. У него губа всегда в районе пупа здесь крутилась. Для него любимой фразой было «Ты, что, дурак, что ли?». И вот мы с ним пытаемся по-английски друг другу что-то объяснить. И в какой-то момент он мне говорит, опять же со своим апломбом: «You are wrong (Ты не прав)». Ну, в морду не дали – уже спасибо. И я, естественно, без всякого дерганья, пытаюсь ему что-то объяснить свою позицию. И вдруг (but suddenly) этот пенек, который как нам казалось, дремлет, оказывается он паразит всё слышал, он встал, глазенки маленькие, он их открыл широко, высокий, рыжий, ноги длинные, как Паганель. Перегнулся через свой стол и смотрит на него аж с ужасом (они же все актеры) и шепотом: «What did you say? (Что вы сказали?)». Наш не въехал: «He’s wrong». Все уже замолчали, сейчас спектакль будет. Этот смотрит на него, так и говорит: «Maybe, maybe. Maybe this gentleman is wrong, but you’re not gentleman at all. (Может быть, может быть. Может этот джентльмен не прав, а вы вообще не джентльмен)». И наш парень стек под доску. И этот вернулся сюда и устроил нам лекцию минут на 30: «Вы что? Вы куда приехали? Вы кто? Вы что с дерева свалились? Кто вообще дал вам право решать, кто прав, кто неправ. И почему вы решили, что вы правы, а он неправ?». И вот это всё нам выдал, а я сидел и писал, аж ручка скрипела. «Вот как говорите, если хотите, чтобы с вами общались. Вот так вот». 

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

Посмотрите на фразу «Прекрасная погода сегодня, не правда ли?». Что произошло? Что сделал, сказавший эту фразу? Он в первой части что-то высказал свое мнение. Он свободный человек, он имеет на это право. Он может сказать что черный это белый. Он имеет на это право. Но что произошло во второй части? Он как бы себя опроверг и передал все права на критику слушающего его. То есть, «а твое какое мнение?». Понимаете? Даже если человек в чем-то абсолютно уверен, он все равно скажет вот так. То есть, свое мнение он выскажет, но в версии не диктующей, в версии, которая не оскорбит мнение слушающего, которая дает слушателю возможность на равных включиться в диалог и высказать так же свободно свое мнение. 

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

Вопросы типа «плюс-минус». Как они строятся? Такое предложение состоит из двух частей: _____________, ___? В первой – главной, человек высказывает свое мнение: «You can speak English…». Я утверждаю, что «you can speak English» — can стоит в положительном варианте своем, значит, эту часть мы можем условно назвать «плюс». Перевод: «Ну, ты же умеешь говорить по-английски» (типа там «ну, пойдем, попросим, займем у них 50 долларов, напьемся. Я вот не умею, а то бы попросил»).  «You can speak English…» — я утверждаю, а потом я останавливаюсь и сам себя спрашиваю: «Слушай, ты, псих, а кто тебе разрешил вообще разрешил говорить об этом с ним? А вдруг ему это неприятно? А вдруг он не хочет, чтобы кто-то знал, что он говорит по-английски? А может даже если он говорит, ему не хочется идти занимать 50 долларов?». И своей второй частью фразы, я сам себя опровергаю и говорю вот как: «…can’t you?». Вместе: «You can speak English, can’t you?». Can’t = can not -> not – это отрицание. Значит, эта часть идет со знаком «минус». Вот и получился вопрос «плюс-минус». 

Почему вам лучше так запомнить («плюс-минус»)? Потому что оно сразу обо всем говорит. У меня на вчерашнем уроке то же самое проходила группа и говорит: «А в книжках это называется «вопросы с хвостиком»». Я говорю: «Да, они называются «вопросы с хвостиком». Если ты хочешь, чтоб тебя считали, что ты «с хвостиком», можешь себя так и называть. Так я тебе еще бесплатно дам другую информацию. В учебниках эти же вопросы называются Disjunctive Questions (дословно «расчлененные вопросы»). Так это уже вообще, собачек расчленяют, чтобы посмотреть, как у них все работает. Тебе это интересно? А мне – нет». 

Итак, запоминаем, вопрос «плюс-минус». You can speak English, can’t you? (Ну, ты же умеешь говорить по-английски, не так ли/ не правда ли?). Первая часть вопроса не может вызвать у вас никаких проблем, это обычное утверждение (подлежащее, глагол). Точно так же: «He knows her well (Он же хорошо ее знает). Я про какого-то he и про какую-то her так сказал кому-то третьему – это утверждение, это «плюс». А теперь говорю сам себе: «Елки, какой же ты нафиг джентльмен, если ты кому-то говоришь про интимные отношения he и her?». И сам себя опять начинаю опровергать: «… doesn’t he?». Вместе: «He knows her well, doesn’t he?». 

Посмотрите внимательно. В этом довесочке стоит «…can’t you?», в этом довесочке стоит «…doesn’t he?». Почему так? Потому что это («…can’t you?») является отзывом на сюда (You can speak English) – их иногда еще называют эхо конструкцией. А здесь это («… doesn’t he?») уже отклик на эту часть («He knows her well…»). Не зависимо от того какие слова стоят здесь и во всех других версиях, перевод хвостика всегда один и тот же (не так ли/не правда ли). И неважно в каком времени записаны эти вопросы. Вот эти два мы записали в Present Indefinite Tense. Мы сейчас можем записать точно такой же вопрос в Past Indefinite. Его мы уже знаем, мы можем писать такой вопрос.

(Ст.) А я могу сказать «…doesn’t him?»?

(Пр.) Нет не можешь.

Смотрите: «They were here last evening… (они же были здесь вчера вечером)» — я это утверждаю, стоит were, значит, это опять «плюс». А потом сам себе говорю: «Ну, и что ты сказала? Ведь ты же знаешь, что вчера пропал цветной телевизор. Если ты такое утверждение говоришь, значит, падет часть проблемы на they». И я опять себя начинаю опровергать: «…weren’t they?». И это уже вопрос, написанный в Past Indefinite Tense. И этот довесок переведется так же (не так ли/не правда ли). То есть, я оставляю право решать окончательно за тем человеком, к которому я обращаюсь с этим вопросом. 

Кстати, мы назвали эти предложения «вопросы плюс-минус». На самом деле, первая основная часть – это не вопрос, это повествовательно предложение. Я утверждаю, что «They were here last evening…» — повествовательное предложение в Past Indefinite. Тогда почему мы его называем вопросом? Да потому что этот кусочек («…weren’t they?») идет вопросительной конструкции. И, кстати, вам вопрос: «Вот это («…weren’t they?») что вам напоминает?». Это же укороченный кусочек от удивленно-раздраженного вопроса. Ведь мы так брали удивленно-раздраженный вопрос: мы брали were, they, а потом к глаголу, стоявшему на первом месте (were), добавляли not

Отрицательная часть вопроса всегда представляет собой фактически укороченный удивленно-раздраженный вопрос к главной части предложения. 

Если мы сейчас к главной части предложения начнем строить удивленно-раздраженный вопрос, он начнется именно так: «Weren’t they here yesterday?». Как мы начали его задавать? Сначала построили general: «Were ___ they here yesterday?». А теперь что мы должны сделать с этой фразой, чтобы превратить ее из general’а в удивленно-раздраженный? Что? Not добавить: «Weren’t they here yesterday?». Так вот этот кусочек и пришел к нам сюда. 

Так, с этим типом вопросов более-менее разобрались. 

Вопрос типа «минус-плюс» 

Они являются полным аналогом только что рассмотренных. Имеется в виду, что они применяются с той же самой целью, чтобы культурно интеллигентно не вызывающе высказать свое мнение. Но почему мы их назвали «минус-плюс»? Да потому что часто нужно бывает именно так. В основной главной части предложения дать какую-то отрицательную информацию. Типа: «Ну, ты же не был здесь вчера? Ты же ничего не видел. Что ты сейчас выступаешь?». Может такое быть предложение? Да миллион раз. «You weren’t here yesterday…» — вот наша первая главная часть предложения, она построена в отрицательном ключе: я знаю, что тебя здесь не было, и я это утверждаю. Значит это у нас уже «минус». А теперь смотрите. Я опять себе говорю: «Дурак, ну что ты лезешь со своим языком? А может ему не хочется про это говорить? А может он был, да ты не заметил?». И я опять сюда подхожу и опять себя опровергаю, а как можно опровергнуть это? Сказать об этом в негативе. А теперь вопрос. А если негатив уже есть и мы негатив начинаем опровергать негативом, что в арифметике получается? Плюс (минус на минус дает плюс). И выглядеть это уже будет так: «…were you?», а это плюс. «You weren’t here yesterday, were you?». 

Теперь внимание. Мы только что сказали, что в только что рассмотренном нам типе, вот этот кусочек («…were you?») не зависимо от слов какие здесь стоят, переводится на русский образом «не так ли/не правда ли». А как мы здесь будем переводить? Точно так же. 

А теперь задаю вопрос вам. Довесочек в вопросе «плюс-минус» мы назвали укороченным удивленно-раздраженным вопросом. А здесь довесочек этот? General (общий вопрос).  

В таких вопросах довесок представляет собой уже укороченный general к первой части предложения.   

В вопросах «плюс-минус» это был укороченный удивленно-раздраженный вариант.

В вопросах «минус-плюс» это кусочек представляет собой укороченный обычный нормальный general. 

А теперь последнее и очень важное.

Лекция 11 — Часть 1 — Английские поговорки 

Все лекции по грамматике английского языка 

Лекция 11 — Часть 3 — Ответы на вопросы «плюс-минус» и «минус-плюс» 

28 готовых списков, полезные сервисы для работы с минус словами