Piszę kod do analizy ciągów wyrażeń matematycznych i zauważyłem, że kolejność, w której operatory łańcuchowe są analizowane w Pythonie, różni się od kolejności w Excelu.
From http://docs.python.org/reference/expressions.html :
„Tak więc w niepodzielnej sekwencji mocy i jednoargumentowych operatorów, operatory są oceniane od prawej do lewej (nie ogranicza to kolejności oceny dla argumentów): -1 * 2 daje -1.” *
Oznacza to, że w Pythonie:
2**2**3
jest oceniane jako2**(2**3) = 2**8 = 256
W programie Excel działa odwrotnie: 2^2^3
jest oceniany jako(2^2)^3 = 4^3 = 64
Teraz muszę wybrać implementację dla własnego parsera. Kolejność programu Excel jest łatwiejsza do wdrożenia, ponieważ odzwierciedla kolejność oceny mnożenia.
Zapytałem kilka osób w biurze, jakie są ich odczucia w ocenie 2^2^3
i otrzymałem mieszane odpowiedzi.
Czy ktoś zna jakieś dobre powody lub konsekwencje na rzecz implementacji Pythona? A jeśli nie masz odpowiedzi, prosimy o komentarz z wynikiem, jaki otrzymujesz z jelit - 64
lub 256
?