and I was wondering if it's possible to do something as elegant as this but for postfix evaluation.
La notazione Postfix non è pensata per essere elaborata con uno stack di chiamate o ricorsione o in realtà qualcosa di quella natura. È progettato per implementazioni semplici e strette con un semplice loop e uno stack accanto. Questi rientrano nel regno delle macchine stack e spesso si trovano nei sistemi embedded a causa della loro semplicità. Trovi cose come avanti, postscript e jvm come macchine stack di grande successo (vedi Wikipedia - Macchine virtuali basate su stack di categorie ) insieme al venerabile HP calcolatrice rpn .
L'eleganza di postfix può essere vista nel ciclo semplice:
while not end of file
read into var
if var is not operand
push var
else if var is '+'
pop into v1
pop into v2
push v1 + v2
else if var is '*'
pop into v1
pop info v2
push v1 * v2
E così si passa e si implementano tutti gli operandi e il gioco è fatto. dc
ha 27 operandi (cose come print (pop e print) P
, print (just print) p
, stampa lo stack f
, cancella lo stack c
, ecc ...). Puoi leggerli alla pagina man dc.1 . Devo ammettere che ci sono alcune strutture più eleganti per implementare gli operandi piuttosto che un enorme se non altro se la cascata dipende dalla lingua ... ma l'idea è stata trovata.
L'eleganza del sistema è la sua semplicità. Non devi preoccuparti di impilare cornici, chiamare convenzioni e simili quando lo implementa. Hai uno stack e una variabile o due.