RPN = notazione postfissa

m0Vinnie non è del tutto convinto dell’utilità della notazione polacca inversa, quella di solito indicata con RNP per reverse polish notation.
Si chiama polacca per via di chi l’ha proposta, provo a scrviere il suo nome, anzi per sicurezza copioncollo dalla Wiki, ecco –provo nèh!– Jan Łukasiewicz. Notata la L tagliata, chi usa Linux con la tastiera italiana riesce a ottenerla con Maiusc + Alt Gr + W, così Ł 😀 Al solito la scorciatoia è mnemonica, almeno per i polacchi, difatti Ł si legge come W, una storia lunga, del ‘700, che confonde anche i polacchi (mi è stato detto, nie mówię po polsku, nèh!). Ma la Ł è solo l’inizio il nome contiene coniene altre lettere problematiche, almeno per me. OK, sono andato fuori tema 🙄

Pensavo di dover scrivere io, anzi avevo cominciato con:

quando introduci un numero questo viene inserito in cima allo stack, quando inserisci un operatore questo esegue l’operazione recuperando il numero adatto di numeri in cima allo stack.

OK, la prima bozza, da correggere pesantemente, da riscrivere. Con uno o più esempi.
Poi però sono tornato in me e mi son chiesto perché non provare a googlare?
Ecco, un’idea vincente, ho trovato tutto quello che cercavo, scritta molto meglio di come avrei potuto fare io. Per cui prima di qualche rimembranza a cose dello scorso millennio (roba anni ’70) ecco un elenco di risorse:

  • RPN, in The Museum of HP Calculators. Semplice e chiaro; su HP tornerò a breve. Importante la prima parte “What is RPN?” e “Why Did/Does HP Use RPN?”; si potrebbe sostituire “HP” con “Juhan et al.” ma va beeene anche così.
  • interactive online RPN calculator, molto semplice ma ottimo per provare.
  • sullo stesso sito abbiamo nuovamente la spiegazione “What is Reverse Polish Notation?” più semplice di quella di HP.
  • e ancora, Infix to Postfix Convertor.
  • una calcolatrice RPN online, bella con visualizzazione dello stack: RPN Online Calculator, conviene usare i pulsanti, non la tastiera. Notare come la pagina intercetti tutti i tasti battuti, sembra che la tastiera non funzioni o che il browser sia in errore.
  • altra calcolatrice, versione semplice: RPN Calculator, nella stessa pagina c’è il link a lla nuova calcolatrice più potente, non RPN.
  • altra calcolatrice online, tutte le funzioni che uno s’immagina: JavaScript RPN Calculator.

Perché RPN? perché è molto più semplice, davvero. Io per dire, anche se non sono certo più sveglio della media ho capito tutto al volo (OK, a volte faccio come i preti, i politici, i venditori di auto usate; ma solo un pochino, quasi trascurabile). Ci sarebbe anche da raccontare che allora (cioè sempre quando ero giovane e quando i computer come li conosciamo oggi non esistevano ancora) HP era quasi come Apple oggi per gli Apple-fanboy. Non ricordo quale fosse la prima ma ecco il mito, l’11C:

11c

Costava parecchio sulle 120mila lire di allora ma è durata tantissimo. Un investimento azzeccatissimo. È anche stata l’ultima che ho usato. Non so se oggi hanno ancora senso, e se si usano come sono. Dal catalogo HP vedo che la HP 35s, RPN vale 70 €.

Molto economiche quelle più semplici (algebriche): HP 300s+ e HP 10s+.

In informatica la notazione RPN si trova spesso dove non te lo aspetti. Torno ai ricordi e cito il Forth, efficientissimo sulle piccolissime (come memoria) macchine di allora, anche se non semplicissimo: ha vinto il Basic.
Usatissimo, il Postscript, RPN a insaputa dei più.

Ma –come dire– da aspirante lisper mi viene da pensare che ecco.
:mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • vinnie  Il 10 marzo 2016 alle 02:36

    Ok, sempre con il mio solito ritardo, vediamo se ho capito (o se non ho capito):
    rpn si usa perché è più vicino al calcolatore e quindi è più veloce da computare, in sostanza le operazioni sono già nell’ordine di esecuzione senza dover essere riordinate, quindi per lo stack di 3 2 -:
    viene prelevato il meno, il processore sa che dovrà effettuare una sottrazione
    viene estratto il 2 che è il -secondo- operando
    viene estratto il 3 che è il -primo- operando
    quindi 3-2 = 1
    però è questo che mi fa un po’ strano, per rimanere vicino alla macchina non avrebbe più senso fare 2 3 – così che venga estratto prima il primo operando ?
    Per esempio nel primo link hpmuseum che hai postato, quando compie (4+5)/(6+7) cioè 4 5 + 6 7 + / , nella divisione finale si capisce subito che considera y come primo operando e x come secondo.
    Forse non ha importanza per come è fatto un pc la precedenza con cui vengono copiati i dati nei registri (non conosco assembly).

    Mi viene spontanea una domanda, anche la notazione prefissa può fare a meno delle parentesi? perché sarebbe comico che un linguaggio come il lisp strapieno di parentesi le eviti totalmente per le espressioni matematiche!

    • juhan  Il 10 marzo 2016 alle 07:12

      “Più vicina al calcolatore” vale anche se il calcolatore è umano e non legato alla notazione algebrica. Davvero, sembra strano ma se ti abitui vedrai.
      Per l’ordine devi fare qualche prova costruendoti lo stack e vedrai che l’ordine deve essere quello.
      Le parentesi del Lisp servono a definire l’espressione; altrimenti anche con la notazione prefissa si possono evitare.
      Ma tutta questa storia delle parentesi è finta, non sono più numerose di quelle che servono. E sono comodissime (potrei farla lunga qui) 😀

      • vinnie  Il 10 marzo 2016 alle 17:12

        Non ti preoccupare, io adoro le parentesi XD
        Tu pensa che, con sommo odio da parte delle mie prof, nel c++ usavo più graffe del dovuto così da poter collassare con geany blocchi di codice che raggruppavo logicamente (ma ere sempre codice imperativo quindi non aveva senso).
        Nelle espressioni matematiche facevo anche cose del genere 5 + (5*5) , anche se pure questo non aveva senso mi aiutava a rendere ben evidenti le operazioni.
        Solo che dicevo che un linguaggio che ha bisogno di più parentesi degli altri (visto che sta proprio insito nella sintassi) è comico vedere come le espressioni matematiche non ne hanno affatto bisogno (forse da un punto di vista estetico è anche più carino).
        Ieri ho fatto vedere il tuo blog ad un paio di amici di chat e hanno apprezzato, mi fai un piacerissimo, nel commento mi saluti dree, cotton e nux? XD

      • juhan  Il 10 marzo 2016 alle 17:15

        Saluti a (list “vinnie” “dree” “cotton” “nux”)
        Potri costruire la lista con cons ma ci vorrebbero più parentesi.

  • vinnie  Il 10 marzo 2016 alle 17:28

    Grazie juhan 🙂

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: