Яке значення зворотного польського позначення?


21

Я викладаю обчислювальну роботу до 18-річних. Після того, як вони пояснили зворотне позначення польською мовою, один запитав, чому це досить важливо, щоб бути на державному іспиті. Я пояснив історичну значимість калькуляторів 70-х, але це не вдалося вирішити проблему. Так є і паралельні практичні чи теоретичні програми RPN.


3
Я займаюся програмуванням майже десять років і закінчив магістр з CS, але не думаю, що я ніколи не бачив і не використовував зворотний лак в будь-якому серйозному контексті. Ви впевнені, що це актуально, зокрема для навчання студентів?
Рафаель

Ось реалізація механізму регулярних виразів, який використовує позначення postfix: swtch.com/~rsc/regexp/regexp1.html#thompson . Кен Томпсон також використав це в своїй першій реалізації. Крім того, це популярна методика оцінки виразів під час виконання (якщо ви створюєте компілятор).
saadtaame

У RPN ви можете записати будь-який вираз без використання дужок.
Помилка Seg

3
Стаття Вікіпедії про RPN висвітлює багато питань. Логічні тексти іноді посилаються на польські позначення (оскільки це дужки вільно), коли вони пояснюють, що може бути пропущено з доказів як чистий «синтаксичний цукор». Однак RPN важливий через тісний зв'язок із стеками. Розуміння стеків важливе для інтерактивної налагодження, тому що знаменитий "backtrace" - це звичайно лише скидання стеків. Чисті функціональні мови все ще намагаються запропонувати щось порівнянне з дампам стека для налагодження, навіть тому вони мали б набагато більш детальну інформацію, щоб запропонувати (якби вони могли це представляти).
Томас Клімпель

Я повинен частково відмовитись від свого колишнього коментаря. Я вже бачив використовувати хто - то після ремонту позначення для рядків дампа дерев. Це було жахливо читати, але легко кодувати. Тож у дуже конкретних випадках використання РП може бути корисним, але я не впевнений, чи поширюється це на освіту (загалом). Ви можете використовувати його, щоб показати, що синтаксис не виправлений, я думаю.
Рафаель

Відповіді:


9

Я кілька разів використовував RPN для швидкого прототипування, наприклад, програм, які повинні читати та інтерпретувати математичний вираз, що надається користувачем.

У той час як регулярні математичні позначення потребують хоча б рекурсивного аналізатора (дужки думок, замовлення оператора тощо), аналізатор RPN - це, як правило, стек з switchтвердженням-подібним. Я здогадуюсь, що саме це поєднання простоти та виразної сили призвело до того, що HP спочатку використовувала його.

Однак це зазвичай для швидкого складання прототипів і для зручності. Я б ніколи не припускав, що користувач може або хоче зрозуміти RPN.


8

Просто для розширення попередніх відповідей / коментарів: не забувайте, що RPN живий і у чудовій формі ... насправді він зараз використовується у стекових машинах, як віртуальна машина Java.

З Вікіпедії: "... машина стека реалізує стек з регістрами. Операнди арифметичної логічної одиниці (ALU) завжди є першими двома регістрами стека, а результат від ALU зберігається у верхньому регістрі стека "Машина стека", як правило, відноситься до комп'ютерів, які використовують стек Last-in, First-out для зберігання короткочасних тимчасових значень під час виконання окремих програмних заяв. Набір інструкцій виконує більшість операцій ALU з операціями postfix ( Reverse Polish notation ), які працювати лише на стеку виразів, а не на регістри даних або основні комірки пам'яті ... "

У переваги / недоліки такого підходу описані також в статті Вікіпедії .


Гм, дивлячись на байт-код, ви не бачите RPN як такої; звичайно, інструкції відображаються в порядку "після виправлення", але це не схоже на RPN в арифметиці, і його причина досить зрозуміла. Машини реєстрації повинні діяти так само: значення навантаження, а потім комбінувати.
Рафаель

5

Forth і PostScript (і, таким чином, PDF, який IIRC розпочав як двійкове кодування підмножини PostScript), є більш відомими мовами постфіксів, ніж один з кишенькових калькуляторів HP.

Тоді це також відносно поширений вибір як проміжне представлення у простих компіляторах.

Більш простий VM, як правило, має також мову "машинного" постфікса.


До речі, словосполучення "простіший VM" включає JVM. Що цікаво про RPN, це те, що це найпростіша корисна машина стека. Машини для стекування - це те, що дійсно цікаво, корисно і актуально.
Псевдонім

4

Що стосується калькуляторів: Дивіться, що таке RPN?

  • Переваги: ​​RPN економить час та натискання клавіш. Ви уникаєте використання та відстеження дужок, роблячи обчислення. Процес схожий на те, як ви вивчили математику на папері.

  • Ви можете бачити посередницькі результати під час обчислень, а не лише відповідь в кінці. Це надзвичайно корисно для вивчення логіки. Вчителі математики використовують цю функцію для поліпшення розуміння учнями математики.

  • Проміжний результат дозволяє користувачеві легше перевірити відповідь та виправити помилки. Простіше стежити за потоком обчислення. Користувач визначає пріоритет операторів.

  • RPN є логічним, оскільки користувач спочатку дає номер, а потім повідомляє, що з ним робити.


3

Як видно з назви, зворотні польські позначення або прямі польські позначення - це позначення. Вони є синтаксисом для представлення чогось, і фактично ефективним синтаксисом, якщо врахувати вимоги до пам'яті. Вони представляють собою вкорінені дерева, які можуть бути формулами, абстрактними синтаксичними деревами (AST) та іншими видами утворень, які кожен має конституційне право вважати абсолютно марними.

Інколи такі об'єкти доводиться зберігати у файлі. Наприклад, є системи, які можуть редагувати або трансформувати програми як AST, і їм може знадобитися зберігати такі уявлення. Польська форма зручна. Він має обмежену читабельність для людей, особливо для великих дерев, але це дуже зручне представлення для машин.

Іншим його аспектом є те, що я вважаю, що вивчення дерев та їх елементарного використання та репрезентації, а також пов'язаних з ними пристроїв (стеків) є педагогічно корисним як вступ до майбутніх досліджень більш досконалих концепцій (синтаксису, розбору, логіки, лінгвістики) , ...).

Це також має перевагу в тому, що концептуально досить просто та легко експериментувати на папері. Це також приємний привід обговорити синтаксис і той факт, що синтаксис є представництвом, і що представлення можуть відрізнятися, одночасно представляючи одне і те ж, і що різні представлення можуть використовуватися залежно від необхідності задоволення (оптимізація простору, проста модифікація, читабельність людини, читабельність за комп’ютером, ...).

Але я здивований, що це питання та його відповіді розглядають лише RPN, і жоден не вважає прямі польські позначення.

Це, звичайно, чудово, що студенти запитують. Але відповідь на таке питання завжди має різні аспекти. Це корисно для самих знань? Я думаю це. Чи корисна вона як педагогічна вправа? Я думаю, що це так, але це багато що залежить від призначеної аудиторії, і тільки вчитель може оцінити, що він здатний зрозуміти. Чи корисно зрозуміти деякі концептуальні питання? Я думаю, що так, але знову ж таки, це залежить від оцінки вчителя, які поняття можна пояснити їх учням.


2

Ваш студент був абсолютно правий. Зворотна польська нотація недостатньо важлива в галузі інформатики, щоб її варто витрачати на неї дуже обмежений час. Натомість існує стільки інших чудових концептуальних ідей, яких ви могли б навчити, з глибокими інтелектуальними ідеями: стабільний шлюб, вирізання пирога, діагоналізація та невирішеність проблеми зупинки, інтерактивні докази та докази нульових знань тощо, тощо. Так, все це може бути доступним для 18-річних.

І, я сподіваюся, ви похвалили свого учня за те, що він був досить сміливим, щоб задати питання! Вони повинні були поставити себе на виступ, щоб підняти це питання. Це добре говорить про ваш стиль навчання, що вони почували себе комфортно, задаючи вам це питання.


1
Польська нотація майже не займає часу для викладання. Важливе значення має також лінеаризація стандартних структур, таких як дерева, враховуючи, що масове зберігання часто є послідовним, а не випадковим доступом. Ви також можете заховати його ефективно зберігати або зрозуміти, як отримати його повністю або частково. Він з'єднує дерева, прогулянку по деревах, вбудовані конструкції та висунення. Абстрактно, він розповідає, як зробити кодування Gödel для даних. Порівнюючи з величезною тратою часу та енергії, представленою синтаксичним розбором LR та LL, та іншими неприємними технологіями, я б навіть сказав, що час, витрачений на польську нотацію, - це добре витрачений час.
бабу

"недостатньо вагомий у галузі інформатики" - неймовірно впевнений
Дмитро Зайцев

1

Зворотна польська нотація була хорошим інструментом моєї освіти для розуміння розбору дерев та структур даних про дерева взагалі. Також корисно, якщо хтось взагалі має інтерес до програмування на будь-якій з мов сімейства Lisp (Clojure, emacs-lisp, схема тощо).


Чому Лісп і схема? Вони рясні в дужках.
бабу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.