逆ポーランド記法の意義は何ですか?


21

私は18歳の生徒にコンピューティングを教えています。逆ポーランド記法を説明した後、なぜ公開試験に参加するのに十分な意味があるのか​​と尋ねられました。70年代の電卓の歴史的重要性について説明しましたが、実際にはこの問題に対処できませんでした。そのため、RPNの実用的または理論的な同時適用もあります。


3
私は10年近くプログラミングをしており、CSで修士号を取得していますが、深刻な状況でリバースポリッシュを見たり使用したことはないと思います。特に学生の指導に関連している確信していますか?
ラファエル

以下に、後置記法を使用する正規表現エンジンの実装を示します。swtch.com / ~rsc / regexp / regexp1.html#thompson Ken Thompsonは、最初の実装でもそれを使用しました。また、実行時に式を評価するための一般的な手法です(コンパイラを構築している場合)。
-saadtaame

RPNでは、括弧を使用せずに式を書き留めることができます。
ワンセグ障害

3
RPNに関するウィキペディアの記事は、多くの分野をカバーしています。論理テキストは、証明から省略できるものを純粋な「構文糖」として説明するときに、洗練された表記を参照する場合があります(括弧がないため)。ただし、RPNはスタックと密接な関係があるため重要です。有名な「バックトレース」は通常、単なるスタックダンプであるため、スタックを理解することは対話型デバッグにとって重要です。純粋な関数型言語は、提供するはるかに詳細な情報がある場合でも(デバッグできる場合)、デバッグ用のスタックダンプに匹敵するものを提供するのに苦労しています。
トーマスクリンペル

以前のコメントを部分的に撤回する必要があります。私がしている文字列ダンプの木に誰かの使用ポストフィックス表記を見ました。読むのは恐ろしいが、コーディングは簡単だった。そのため、非常に特定のユースケースでは、RPが役立つ場合がありますが、これが教育にまで及ぶかどうかはわかりません(一般的に)。これを使用して、構文が修正されていないことを示すことができます。
ラファエル

回答:


9

ユーザーが提供する数式を読み取って解釈する必要のあるプログラムなど、ラピッドプロトタイピングにRPNを数回使用しました。

通常の数学表記では、少なくとも再帰的なパーサー(大括弧、演算子の順序など)が必要ですが、RPNパーサーは基本的にswitch-likeステートメントのあるスタックです。HPが最初にそれを使用するようになったのは、この単純さと表現力の組み合わせです。

ただし、これは通常、迅速なプロトタイピングと利便性のためです。ユーザーがRPNを理解できる、または理解したいとは思いません。


8

以前の回答/コメントを拡張するために:RPNが生きており、素晴らしい形であることを忘れないでください...実際、それは現在Java仮想マシンのようなスタックマシンで使用されています

ウィキペディアから:"...スタックマシンはレジスタ付きのスタックを実装します。算術論理ユニット(ALU)のオペランドは常にスタックの上位2つのレジスタであり、ALUの結果はスタックの最上位レジスタに格納されます「スタックマシンは、」一般的に、個々のプログラムステートメントを実行しながら短命一時的な値を保持するために、まずアウト、最終-でスタックを使用しているコンピュータを指します。命令セットは、ほとんどのALUのアクションを実行する接尾辞を持つ逆ポーランド記法操作することを式スタックでのみ機能し、データレジスタまたはメインメモリセルでは機能しません...」

このようなアプローチ利点/欠点は、Wikipediaの記事にも記載されています


うーん、バイトコードを見ると、RPN自体は見えません。もちろん、命令は「修正後」の順序で表示されますが、算術ではRPNのようには見えず、その理由はかなり明確です。登録マシンは同じ方法で処理する必要があります。値をロードしてから結合します。
ラファエル

5

ForthおよびPostScript(したがって、IIRCがPostScriptのサブセットのバイナリエンコーディングとして開始したPDF)は、HPポケット電卓でよく知られているpostfix言語です。

また、単純なコンパイラの中間表現としても比較的一般的な選択肢です。

より単純なVMには、後置の「マシン」言語も含まれる傾向があります。


ちなみに、「シンプルなVM」という語句にはJVMが含まれます。RPNの興味深い点は、RPNが最も単純で便利なスタックマシンであることです。スタックマシンは、本当に興味深く、有用で関連性の高いものです。
仮名14

4

電卓に関して:RPNとは?

  • 利点:RPNは時間とキーストロークを節約します。計算中に括弧を使用したり追跡したりすることは避けます。このプロセスは、紙で数学を学んだ方法と似ています。

  • 最後に答えだけでなく、計算を実行すると、中間結果を見ることができます。これは、ロジックの学習に非常に役立ちます。数学教師はこの機能を使用して、生徒の数学の理解を向上させています。

  • 中間結果により、ユーザーは答えを確認し、エラーをより簡単に修正できます。計算の流れをたどる方が簡単です。ユーザーはオペレーターの優先順位を定義します。

  • RPNは論理的です。ユーザーが最初に番号を指定してから、それをどうするかを指示するからです。


3

名前が示すように、逆ポーランド記法、または直接ポーランド記法は記法です。それらは何かを表現するための構文であり、メモリ要件を考慮すると実際に効率的な構文です。それらが表すものは、ルート化されたツリーです。これは、公式、抽象構文ツリー(AST)、および他の種類のエンティティであり、絶対に役に立たないと考える憲法上の権利を持っています。

時々、そのようなエンティティをファイルに保存する必要があります。たとえば、プログラムをASTとして編集または変換し、そのような表現を保存する必要があるシステムがあります。ポーランド語フォームは便利です。人間、特に大きな木の読みやすさは限られていますが、機械にとっては非常に便利な表現です。

それの別の側面は、より高度な概念(構文、構文解析、論理、言語学)の将来の研究への導入として、関連するデバイス(スタック)と同様に、木とその基本的な使用と表現の研究が信じられることです、...)。

また、概念的にかなり単純であり、紙で実験しやすいという利点もあります。また、構文と、構文は表現であり、表現は同じものを表現しながら変化する可能性があり、満たされる必要性に応じて異なる表現が使用される可能性があるという事実を議論する良い機会です(スペース最適化、簡単な変更、人間の可読性、コンピューターの可読性、...)。

しかし、私はこの質問とその回答がRPNのみを考慮しており、直接の洗練された表記法を考慮していないことに驚いています。

学生が尋ねることは確かに優れています。しかし、そのような質問に答えるには常に多様な側面があります。それは知識そのものに役立ちますか?私はそう思う。教育的運動として有用ですか?私はそう思うが、それは意図した聴衆に大きく依存し、教師だけが理解できることを評価できる。いくつかの概念的な問題を理解することは有用ですか?それはそうだと思いますが、やはり、生徒にどのような概念を説明できるかについての教師の評価にかかっています。


2

あなたの学生は絶対に正しかった。逆ポーランド記法は、非常に限られた授業時間を費やすだけの価値があるほど、コンピューターサイエンスでは重要ではありません。代わりに、深い知的アイデアで教えることができた他の多くの素晴らしい概念的アイデアがあります:安定した結婚、ケーキカット、対角化と停止問題の決定不能性、インタラクティブな証明とゼロ知識の証明など。これらはすべて18歳の人がアクセスできるようにすることができます。

そして、あなたが質問をするのに十分勇敢であるためにあなたの学生を賞賛したことを望みます!彼らは問題を提起するために棚に身を置かなければなりませんでした。彼らがあなたにこの質問をするのを快く感じたのは、あなたの指導スタイルにとって良いことです。


1
ポーランド語の表記法は、教えるのにほとんど時間がかかりません。ツリーなどの標準構造の線形化も重要です。これは、大容量記憶装置がランダムアクセスではなくシーケンシャルアクセスであることが多いためです。また、効率的に保存するか、全体または一部を取得する方法を理解することもできます。ツリー、ツリーウォーク、埋め込み構造、プッシュダウンを接続します。抽象的には、データのGödelエンコードの作成方法を示します。LRおよびLL解析、およびその他のジャンクテクノロジーに代表される膨大な時間とエネルギーの浪費と比較して、ポリッシュ表記に費やした時間は十分に費やされた時間であるとも言えます。
babou

「コンピュータサイエンスでは十分ではありません」-信じられないほどの意見
ドミトリ・ザイツェフ

1

私の教育では、逆ポーランド記法は、解析ツリーとツリーデータ構造全般を理解するための優れたツールでした。Lispファミリーの言語(Clojure、emacs-lisp、schemeなど)のプログラミングに興味を持っている人がいる場合にも役立ちます。


なぜLispとSchemeなのか?彼らは括弧でいっぱいです。
バブー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.