Qual è il significato della notazione polacca inversa?


21

Insegno informatica a 18 anni. Dopo aver spiegato loro la notazione polacca inversa, ci si è chiesti perché sia ​​abbastanza significativo essere nell'esame pubblico. Ho spiegato il significato storico dei calcolatori degli anni '70, ma questo non è riuscito a risolvere il problema. Così ci sono e applicazioni pratiche o teoriche simultanee di RPN.


3
Ho programmato per quasi dieci anni e ho completato un master in CS, ma non credo di aver mai visto o usato il reverse polish in nessun contesto serio. Sei sicuro che sia pertinente, in particolare per insegnare agli studenti?
Raffaello

Ecco un'implementazione di un motore di espressioni regolari che utilizza la notazione postfix: swtch.com/~rsc/regexp/regexp1.html#thompson . Ken Thompson lo usò anche nella sua prima implementazione. Inoltre, è una tecnica popolare per valutare le espressioni in fase di esecuzione (se si sta costruendo un compilatore).
Saadtaame,

In RPN puoi scrivere qualsiasi espressione senza usare le parentesi.
Seg Fault,

3
L'articolo di Wikipedia su RPN copre molto terreno. I testi logici a volte si riferiscono alla notazione polacca (perché è senza parentesi), quando spiegano cosa si può omettere dalle prove come puro "zucchero sintattico". Tuttavia, RPN è importante a causa della sua stretta relazione con gli stack. Comprendere gli stack è importante per il debug interattivo, in quanto il famoso "backtrace" è normalmente solo un dump dello stack. I linguaggi puri funzionali stanno ancora lottando per offrire qualcosa di paragonabile a uno stack dump per il debug, anche se avrebbero informazioni molto più dettagliate da offrire (se potessero rappresentarlo).
Thomas Klimpel,

Devo ritirare parzialmente il mio precedente commento. Io ho visto l'uso che qualcuno post-fix notazione per alberi stringa-dump. Era orribile da leggere, ma facile da programmare. Quindi, in casi d'uso molto specifici, RP può essere utile, ma non sono sicuro che ciò si estenda all'istruzione (in generale). Puoi usarlo per mostrare che la sintassi non è corretta, immagino.
Raffaello

Risposte:


9

Ho usato diverse volte RPN per la prototipazione rapida, ad esempio di programmi che devono leggere e interpretare un'espressione matematica fornita dall'utente.

Mentre una normale notazione matematica richiederebbe almeno un parser ricorsivo (parentesi quadre, ordine dell'operatore, ecc ...), un parser RPN è fondamentalmente uno stack con switchun'istruzione simile. Immagino sia questa combinazione di semplicità e potenza espressiva che ha portato HP ad usarlo inizialmente.

Questo è, tuttavia, di solito per prototipazione rapida e per comodità. Non darei mai per scontato che un utente possa o voglia capire RPN.


8

Solo per espandere le precedenti risposte / commenti: non dimenticare che RPN è vivo e in ottima forma ... anzi è attualmente utilizzato in macchine stack come la macchina virtuale Java.

Da Wikipedia: "... una macchina stack implementa una pila con registri. Gli operandi dell'unità logica aritmetica (ALU) sono sempre i primi due registri della pila e il risultato dell'ALU viene memorizzato nel registro superiore della pila "Stack machine" si riferisce comunemente a computer che utilizzano uno stack Last-in, First-out per contenere valori temporanei di breve durata durante l'esecuzione di singole istruzioni di programma. Il set di istruzioni esegue la maggior parte delle azioni ALU con operazioni postfix ( notazione polacca inversa ) che funziona solo sullo stack di espressioni, non sui registri dati o sulle celle di memoria principale ... "

I vantaggi / svantaggi di tale approccio sono anche descritti nell'articolo di Wikipedia .


Hm, guardando il bytecode non vedi RPN di per sé; ovviamente le istruzioni vengono visualizzate in ordine "post-correzione", ma questo non sembra RPN in aritmetica, e la sua ragione è piuttosto chiara. Le macchine di registro devono procedere allo stesso modo: caricare i valori, quindi combinarli.
Raffaello

5

Forth e PostScript (e quindi PDF che IIRC ha iniziato come codifica binaria di un sottoinsieme di PostScript) sono linguaggi Postfix più noti di quelli di HP Pocket Calculator.

Quindi è anche una scelta relativamente comune come rappresentazione intermedia nei compilatori semplici.

La VM più semplice tende ad avere anche un linguaggio "macchina" postfix.


Per inciso, la frase "VM più semplice" include la JVM. La cosa interessante di RPN è che è lo stack machine più semplice e utile. Le macchine stack sono ciò che è veramente interessante, utile e pertinente.
Pseudonimo,

4

Per quanto riguarda i calcolatori: vedi Cos'è l'RPN?

  • Vantaggi: RPN consente di risparmiare tempo e sequenze di tasti. Eviti di usare e tenere traccia delle parentesi mentre esegui i calcoli. Il processo è simile al modo in cui hai imparato la matematica sulla carta.

  • Puoi vedere i risultati intermedi mentre esegui i tuoi calcoli piuttosto che solo la risposta alla fine. Questo è estremamente utile per l'apprendimento della logica. Gli insegnanti di matematica stanno usando questa funzione per migliorare la comprensione della matematica da parte degli studenti.

  • Un risultato intermedio consente all'utente di verificare più facilmente la risposta e correggere gli errori. È più facile seguire il flusso di calcolo. L'utente definisce la priorità degli operatori.

  • RPN è logico perché l'utente fornisce prima il numero e poi dice cosa fare con esso.


3

Come indica il nome, Notazione polacca inversa o Notazione polacca diretta sono notazioni. Sono sintassi per rappresentare qualcosa e sintassi effettivamente efficiente se si considerano i requisiti di memoria. Ciò che rappresentano sono alberi radicati, che possono essere formule, alberi di sintassi astratti (AST) e altri tipi di entità, che chiunque ha il diritto costituzionale di considerare assolutamente inutili.

Occasionalmente, è necessario archiviare tali entità su file. Ad esempio, ci sono sistemi che possono modificare o trasformare programmi come AST e potrebbe essere necessario archiviare tali rappresentazioni. La forma polacca è conveniente. Ha una leggibilità limitata per l'uomo, specialmente per alberi di grandi dimensioni, ma è una rappresentazione molto conveniente per le macchine.

Un altro aspetto è che credo che lo studio degli alberi e dei loro usi e rappresentazioni elementari, nonché i dispositivi associati (pile), siano pedagogicamente utili come introduzione ai futuri studi di concetti più avanzati (sintassi, analisi, logica, linguistica , ...).

Ha anche il vantaggio di essere concettualmente piuttosto semplice e facile da sperimentare sulla carta. È anche una buona occasione per discutere della sintassi e del fatto che la sintassi è rappresentazione e che le rappresentazioni possono variare, pur rappresentando la stessa cosa, e che possono essere utilizzate rappresentazioni diverse a seconda della necessità da soddisfare (ottimizzazione dello spazio, facile modifica, leggibilità umana, leggibilità del computer, ...).

Ma sono sorpreso che questa domanda e le sue risposte stiano prendendo in considerazione solo RPN e nessuno considera la notazione polacca diretta.

È certamente eccellente che gli studenti chiedano. Ma rispondere a questa domanda ha sempre diversi aspetti. È utile per la conoscenza stessa? Io penso che sia. È utile come esercizio pedagogico? Penso di si, ma dipende molto dal pubblico previsto e solo l'insegnante può valutare ciò che è in grado di capire. È utile comprendere alcune questioni concettuali? Penso di si, ma dipende ancora dalla valutazione dell'insegnante su quali concetti possono essere spiegati ai loro studenti.


2

Il tuo studente aveva assolutamente ragione. La notazione polacca inversa non è abbastanza significativa nell'informatica da valere la pena di dedicare molto tempo a questa lezione. Invece, ci sono tante altre meravigliose idee concettuali che avresti potuto insegnare, con idee intellettuali profonde: matrimonio stabile, taglio della torta, diagonalizzazione e indecidibilità del problema di arresto, prove interattive e prove a conoscenza zero, ecc. Ecc. Sì, tutti questi possono essere resi accessibili ai diciottenni.

E spero che tu abbia elogiato il tuo studente per essere stato abbastanza coraggioso da porre la domanda! Hanno dovuto mettersi su una sporgenza per sollevare il problema. Parla bene per il tuo stile di insegnamento nel sentirsi a proprio agio nel farti questa domanda.


1
La notazione polacca non richiede quasi tempo per insegnare. Anche la linearizzazione di strutture standard come gli alberi è importante, dato che l'archiviazione di massa è spesso un accesso sequenziale piuttosto che casuale. Potresti anche voler archiviarlo in modo efficiente o capire come recuperarlo in tutto o in parte. Collega alberi, alberi, strutture incorporate e pushdown. Astrattamente, spiega come realizzare codifiche Gödel per i dati. Rispetto all'enorme perdita di tempo ed energia rappresentata dall'analisi LR e LL e da altre tecnologie spazzatura, direi persino che il tempo trascorso sulla notazione polacca è tempo ben speso.
babou,

"non abbastanza significativo in informatica" - incredibilmente supponente
Dmitri Zaitsev il

1

La Notazione polacca inversa è stata un buon strumento nella mia formazione per comprendere gli alberi di analisi e le strutture dei dati degli alberi in generale. È anche utile se qualcuno ha qualche interesse nella programmazione in una qualsiasi delle lingue della famiglia Lisp (Clojure, emacs-lisp, schema ecc.).


Perché Lisp e Scheme? Sono pieni di parentesi.
babou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.