Algoritmo di smistamento e meno unario

3

Sto tentando di implementare un algoritmo di smistamento per una calcolatrice seguendo le regole del link .

Quando si programma il meno unario, tuttavia, non so quale metodo di precedenza seguire a causa delle idee sollevate nella seguente domanda link

Poiché questo è un componente chiave di un calcolatore funzionante, quale è lo "standard del settore" e esiste un algoritmo che eseguirà entrambi questi metodi di precedenza allo stesso tempo per risolvere questo problema?

Punti bonus se l'algoritmo (se esiste) mantiene l'aumento di tempo lineare O (n).

    
posta Hobojoe 03.09.2016 - 22:12
fonte

1 risposta

2

Quando si cerca uno "standard del settore", si potrebbero guardare i linguaggi di programmazione più popolari. Tuttavia, il problema che stai descrivendo si verifica solo in congiunzione con l'operatore di esponenziazione. E linguaggi come C, C ++, Java, C # queste lingue non hanno questo operatore, Javascript al momento non ne ha uno, ma questo cambierà (vedi sotto).

Nella maggior parte delle lingue che hanno un operatore esponenziale come PHP e Python e altri, in base a questa fonte , l'operatore exp è definito avere una precedenza più alta rispetto agli operatori unari. L'articolo menziona anche alcune eccezioni come la programmazione della shell in Bash. La stessa fonte ci dice che la prossima versione Javascript / ECMAScript 2016 (ES7) introdurrà l'operatore ** in Javascript, ma l'uso di ambigouus sarà proibito.

Si noti che "precedenza più alta" dell'operatore exp qui significa solo "si lega più saldamente al lato sinistro" dell'operatore exp come descritto in i documenti Python . Un segno meno unario sul lato destro verrà sempre applicato per primo, ma questo è semplicemente perché il segno meno in tal caso è accanto al secondo argomento, e il segno dell'esponenziazione non lo è, quindi non è davvero una questione di precedenza ( vedi una delle risposte dalla domanda Math.SE a cui hai dato un link).

Quindi penso che l'uso delle regole Python / PHP sarebbe perfetto e non stupirebbe nessuno, ma non è obbligatorio, e se pensi che una convenzione diversa ti possa servire meglio, scegli quella.

    
risposta data 04.09.2016 - 10:38
fonte

Leggi altre domande sui tag