Apa pentingnya notasi polesan terbalik?


21

Saya mengajar komputasi untuk anak berusia 18 tahun. Setelah notasi polesan terbalik dijelaskan kepada mereka, satu orang bertanya mengapa cukup signifikan untuk mengikuti ujian publik. Saya menjelaskan arti historis kalkulator 70-an tetapi ini gagal untuk benar-benar mengatasi masalah ini. Begitu juga dengan aplikasi praktis atau teoretis RPN.


3
Saya telah memprogram selama hampir sepuluh tahun dan telah menyelesaikan master dalam CS, tetapi saya rasa saya tidak pernah melihat atau menggunakan reverse polish dalam konteks yang serius. Apakah Anda yakin itu adalah relevan, khususnya untuk mengajar siswa?
Raphael

Berikut ini adalah implementasi dari mesin ekspresi reguler yang menggunakan notasi postfix: swtch.com/~rsc/regexp/regexp1.html#thompson . Ken Thompson menggunakannya dalam implementasi pertamanya juga. Juga, ini adalah teknik yang populer untuk mengevaluasi ekspresi pada saat run-time (jika Anda membangun kompiler).
saadtaame

Di RPN Anda dapat menuliskan ekspresi apa pun tanpa menggunakan tanda kurung.
Seg Fault

3
Artikel wikipedia tentang RPN mencakup banyak landasan. Teks-teks logika kadang-kadang merujuk pada notasi polesan (karena itu bebas braket), ketika mereka menjelaskan apa yang bisa dihilangkan dari bukti sebagai "gula sintaksis" murni. Namun, RPN penting karena hubungannya yang dekat dengan tumpukan. Memahami tumpukan sangat penting untuk debugging interaktif, karena "backtrace" yang terkenal biasanya hanya tumpukan sampah. Bahasa fungsional murni masih berjuang untuk menawarkan sesuatu yang dapat dibandingkan dengan tumpukan dump untuk debugging, meskipun demikian mereka akan memiliki informasi yang lebih rinci untuk ditawarkan (jika mereka dapat mewakilinya).
Thomas Klimpel

Saya harus mencabut sebagian komentar saya sebelumnya. Saya telah melihat seseorang menggunakan notasi post-fix untuk string-dump tree. Itu mengerikan untuk dibaca, tetapi mudah untuk kode. Jadi dalam kasus penggunaan yang sangat spesifik, RP mungkin bermanfaat, tetapi saya tidak yakin apakah ini meluas ke pendidikan (secara umum). Anda dapat menggunakannya untuk menunjukkan bahwa sintaks tidak diperbaiki, saya kira.
Raphael

Jawaban:


9

Saya telah menggunakan RPN beberapa kali untuk pembuatan prototipe cepat, misalnya program yang harus membaca dan menafsirkan ekspresi matematika yang disediakan pengguna.

Sedangkan notasi matematika biasa akan membutuhkan setidaknya parser rekursif (pikirkan kurung, urutan operator, dll ...), parser RPN pada dasarnya adalah tumpukan dengan switchpernyataan -seperti. Saya kira kombinasi kesederhanaan dan daya ekspresif inilah yang membuat HP menggunakannya pada awalnya.

Namun, ini biasanya untuk pembuatan prototipe cepat dan untuk kenyamanan. Saya tidak akan pernah menganggap bahwa pengguna dapat, atau ingin, memahami RPN.


8

Hanya untuk memperluas jawaban / komentar sebelumnya: jangan lupa bahwa RPN masih hidup dan dalam kondisi sangat baik ... memang saat ini digunakan dalam mesin tumpukan seperti mesin virtual Java.

Dari Wikipedia: "... mesin stack mengimplementasikan stack dengan register. Operan unit logika aritmatika (ALU) selalu menjadi dua register stack teratas dan hasil dari ALU disimpan dalam register teratas stack. 'Stack machine' biasanya merujuk pada komputer yang menggunakan tumpukan Last-in, First-out untuk menyimpan nilai sementara yang singkat ketika mengeksekusi pernyataan program individual. Set instruksi melakukan sebagian besar tindakan ALU dengan operasi postfix ( notasi Reverse Polish ) yang hanya bekerja pada tumpukan ekspresi, bukan pada register data atau sel memori utama ... "

The keuntungan / kerugian dari pendekatan tersebut juga dijelaskan dalam artikel Wikipedia .


Hm, melihat bytecode Anda tidak melihat RPN per se; Tentu saja petunjuknya muncul dalam urutan "pasca-perbaikan" tetapi itu tidak terlihat seperti RPN di aritmatika, dan alasannya agak jelas. Mesin register harus melanjutkan dengan cara yang sama: memuat nilai, lalu menggabungkan.
Raphael

5

Keempat dan PostScript (dan dengan demikian PDF yang IIRC mulai sebagai pengkodean biner dari subset PostScript) adalah bahasa postfix yang lebih dikenal daripada HP pocket calculator one.

Maka itu juga merupakan pilihan yang relatif umum sebagai representasi perantara dalam kompiler sederhana.

VM yang lebih sederhana cenderung juga memiliki bahasa "mesin" postfix.


Secara kebetulan, frasa "VM sederhana" termasuk JVM. Yang menarik dari RPN adalah bahwa itu adalah mesin stack berguna yang paling sederhana. Mesin tumpukan adalah hal yang sangat menarik dan bermanfaat serta relevan.
Nama samaran

4

Berkenaan dengan kalkulator: Lihat Apa itu RPN?

  • Manfaat: RPN menghemat waktu dan penekanan tombol. Anda menghindari menggunakan dan melacak tanda kurung saat melakukan perhitungan. Prosesnya mirip dengan cara Anda belajar matematika di atas kertas.

  • Anda dapat melihat hasil perantara saat Anda melakukan perhitungan daripada hanya jawaban di akhir. Ini sangat membantu untuk mempelajari logika. Guru matematika menggunakan fitur ini untuk meningkatkan pemahaman siswa tentang matematika.

  • Hasil antara memungkinkan pengguna untuk memeriksa jawaban dan memperbaiki kesalahan dengan lebih mudah. Lebih mudah untuk mengikuti arus perhitungan. Pengguna menentukan prioritas operator.

  • RPN logis karena pengguna pertama-tama memberikan nomor dan kemudian memberi tahu apa yang harus dilakukan dengannya.


3

Seperti namanya, Notasi Polandia Terbalik, atau notasi Polandia Langsung, adalah notasi. Mereka sintaks untuk mewakili sesuatu, dan sebenarnya sintaksis efisien jika Anda mempertimbangkan persyaratan memori. Apa yang mereka wakili adalah pohon berakar, yang dapat berupa formula, pohon sintaksis abstrak (AST), dan jenis entitas lainnya, yang setiap orang memiliki hak konstitusional untuk menganggap sama sekali tidak berguna.

Kadang-kadang, seseorang harus menyimpan entitas tersebut di file. Misalnya ada sistem yang dapat mengedit atau mengubah program sebagai AST, dan mungkin perlu menyimpan representasi tersebut. Formulir Polandia nyaman. Ini memiliki keterbacaan terbatas untuk manusia, terutama untuk pohon besar, tetapi itu adalah representasi yang sangat nyaman untuk mesin.

Aspek lain dari itu adalah bahwa saya percaya studi tentang pohon dan penggunaan dasar dan representasi mereka, serta perangkat terkait (tumpukan), akan bermanfaat secara pedagogis sebagai pengantar studi masa depan dari konsep yang lebih maju (sintaks, parsing, logika, linguistik , ...).

Ini juga memiliki keuntungan karena secara konsep agak sederhana, dan mudah untuk bereksperimen di atas kertas. Ini juga merupakan kesempatan yang baik untuk membahas sintaks dan fakta bahwa sintaksis adalah representasi, dan bahwa representasi dapat bervariasi, sementara mewakili hal yang sama, dan bahwa representasi yang berbeda dapat digunakan tergantung pada kebutuhan yang harus dipenuhi (optimasi ruang, modifikasi mudah, keterbacaan manusia, keterbacaan komputer, ...).

Tetapi saya terkejut bahwa pertanyaan ini, dan jawabannya, hanya mempertimbangkan RPN, dan tidak ada yang menganggap notasi polesan langsung.

Tentunya sangat baik bahwa siswa bertanya. Tetapi menjawab pertanyaan seperti itu selalu memiliki beragam aspek. Apakah itu berguna untuk pengetahuan itu sendiri? Aku rasa ini. Apakah ini berguna sebagai latihan pedagogis? Saya pikir itu, tetapi itu sangat tergantung pada audiens yang dituju, dan hanya guru yang dapat menilai apa yang dapat dipahami. Apakah berguna untuk memahami beberapa masalah konseptual? Saya pikir begitu, tetapi sekali lagi itu tergantung pada penilaian guru tentang konsep apa yang dapat dijelaskan kepada siswa mereka.


2

Murid Anda benar sekali. Reverse Polish Notation tidak cukup signifikan dalam ilmu komputer untuk layak menghabiskan waktu kelas yang sangat terbatas. Alih-alih, ada begitu banyak ide konseptual luar biasa lainnya yang bisa Anda ajarkan, dengan ide-ide intelektual yang mendalam: pernikahan yang stabil, pemotongan kue, diagonalisasi dan ketidakpastian masalah penghentian, bukti interaktif dan bukti tanpa pengetahuan, dll., Dll. Ya, semua itu dapat diakses oleh anak berusia 18 tahun.

Dan, saya harap Anda memuji murid Anda karena cukup berani untuk mengajukan pertanyaan! Mereka harus menempatkan diri di langkan untuk mengangkat masalah ini. Itu berbicara dengan baik untuk gaya mengajar Anda sehingga mereka merasa nyaman menanyakan pertanyaan ini kepada Anda.


1
Notasi Polandia hampir tidak membutuhkan waktu untuk mengajar. Linearisasi struktur standar seperti pohon juga penting, mengingat bahwa penyimpanan massal sering kali berurutan daripada akses acak. Anda mungkin juga ingin menyimpannya secara efisien, atau memahami cara mengambilnya secara keseluruhan atau sebagian. Itu menghubungkan pohon, jalan pohon, struktur tertanam dan pushdown. Secara abstrak, ia memberi tahu cara membuat penyandian data Gödel. Dibandingkan dengan pemborosan waktu dan energi yang luar biasa yang diwakili oleh LR dan LL parsing, dan teknologi sampah lainnya, saya bahkan akan mengatakan bahwa waktu yang dihabiskan untuk notasi Polandia adalah waktu yang dihabiskan dengan baik.
babou

"tidak cukup signifikan dalam ilmu komputer" - sangat beralasan
Dmitri Zaitsev

1

Reverse Polish Notation adalah alat yang baik dalam pendidikan saya untuk memahami pohon parse dan struktur data pohon secara umum. Ini juga berguna jika ada yang memiliki minat sama sekali dalam pemrograman di salah satu keluarga bahasa Lisp (Clojure, emacs-lisp, skema dll.).


Mengapa Lisp dan Skema? Penuh dengan tanda kurung.
babou
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.