February 6th, 2015

компьютеры

Обратная польская запись

Вот интересно, почему в школах не учат ОПЗ? Я про неё узнал только в университете. И вообще, почему она не применяется шире? Ведь она крайне удобная. В первую очередь тем, что исключает неверное прочтение и неправильный порядок действий.

Для тех, кто не знает, что это такое -- арифметическое выражение записывается как "число число действие". Так, "два помножить на три" (т.н. инфиксная нотация) записывается как 2 3 *.

Или вот например, более сложное выражение 5 - 4 * 2. Ученику надо долго вдалбливать, что сначала надо сделать умножение, и только потом вычитать, чтобы у него вместо 2 получились правильные -3.

А вот то же самое в обратной польской записи:

5 4 2 * -

Неверное прочтение исключено.

А насколько проще жить без этих дурацких скобок, которые не делают ровным счётом НИЧЕГО полезного, кроме показывания, какое действие надо выполнить первым?

Вот обычный инфикс: 2 * (3 - 8)
ОПЗ: 2 3 8 - *

Никаких скобок, и порядок действий кристально ясен.

Кажется неудобным? Только по первости. Внутренне мы тоже "парсим" обычное выражение на составные части и считаем их поочерёдно в зависимости от приоритета действия, а потом соединяем части выражения. Точно так же считают компьютеры. Даже те языки, которые напрямую не используют стек для арифметики -- в конечном счёте ведь на ассемблере сначала подготавливаются переменные (записью в регистры), и только потом производится действие.

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

Даёшь пана Лукасевича (он её придумал) в массы!!

RadioShack -- всё

Объявили себя банкротом. Правда, не с целью ликвидации, а с целью реорганизации, но 2 400 магазинов они таки закроют. Хорошо хоть, что оставят в живых тот, что рядом со мной. Иначе где я в 8 вечера, если ВНЕЗАПНО надо, укуплю транзисторов?

Но вообще жаль.