4. НАЧИНАЮТСЯ ПРОТИВОРЕЧИЯ. КАКОГО ТИПА?
Как нам следует поступить, когда данные, которые есть, сильно отличаются от данных - тех, что надо?
- С одной стороны, арифметическое выражение, поступающее на вход интерпретатора, должно быть записано в нотации ПОЛИЗ (как мы только что решили), т.к. программный код в этом случае получается гораздо проще.
- А, с другой стороны, оно же должно быть записано в привычной для большинства людей (инфиксной) нотации, когда знаки ставятся туда, куда их учили ставить в школе.
Значит, мы сталкиваемся с противоречием:
Противоречие 1: "Выражение должно быть записано в инфиксной нотации и должно быть записано в нотации ПОЛИЗ".
Сравним одно и то же выражение, записанное в двух нотациях - в инфиксной и в ПОЛИЗ: "3 + 5" и "3 5 +" соответственно.
И перепишем Противоречие 1 по-другому:
"Знак операции должен стоять между операндами, т.к. это удобно для Пользователя и должен стоять после операндов, чтобы упростить алгоритм интерпретации".
Ранее в статье "Как вспомнить "и так известное" противоречия, встречающиеся в творческих задачах по программированию, сводились к нескольким основным типам.
Например,
- задачи, рассмотренные в той же статье, сводились к типовому противоречию "Много - Мало",
- другие задачи, рассмотренные в статье "Освобождение узников оператора "IF", сводились к типовому противоречию "Одно - Другое",
- противоречие же, которое мы разбираем сейчас, сводится к виду "Раньше - Позже".
Поскольку формализованный тип противоречия выводит на прием решения, еще раз перепишем Противоречие 1:
"Знак операции должен стоять раньше второго операнда, и он же должен стоять позже второго операнда".
Далее...