Ricardo y David. Nunca pensé que iba a disfrutar tanto de una conversación sobre precedencia de operadores. ;P
Saludos. El 25/12/2016 7:15, "Ricardo Cárdenes" <ricardo.carde...@gmail.com> escribió: > Añado, al respecto de calculadoras: en una normal, *donde no se pueden > introducir expresiones aritméticas*, sino que lo que hay en pantalla se > toma siempre como un operando completo, hubiese esperado lo contrario, ya > que estoy solicitando explícitamente elevar al cuadrado el número -2 y > entonces no hay ningún tipo de duda de que el resultado será "4" y no "-4" > > 2016-12-24 20:05 GMT-10:00 Ricardo Cárdenes <ricardo.carde...@gmail.com>: > >> Mire señor Alonso, yo no le he respondido a la ligera. >> >> Primero, como le dije, el caso de Python no es una excepción, sino *la >> regla* en cuanto a lenguajes de programación *que implementan la >> exponenciación* en su sintaxis - es decir, la precedencia está dictada por >> el propio lenguaje. Es decir, no lo busque en C, o en C++, o en Java, etc. >> De hecho, me molesté en documentarme brevemente antes de responder. Y mira >> que no hay muchos lenguajes que implementen la exponenciación en su >> sintaxise, pero le dejo una lista (no exhaustiva), sin irme a casos >> demasiado exóticos: >> >> - ADA: los operadores de MAYOR precedencia son abs (valor absoluto), >> not (negación lógica) y ** (exponenciación). Dos niveles por encima de los >> operadores unarios, y uno por encima de la multiplicación/división. >> - D: El operador ^^ (exponenciación) está un nivel por encima de los >> unarios >> - FORTRAN: El operador ** tiene la precedencia más alta >> - Haskell: Los operadores ^, ^^ y ** (todos de exponenciación) están >> por debajo sólo de "!!", que se usa para acceder a los índices de arrays >> - PHP: ** está por encima de todos los demás operadores aritméticos (y >> mira que le tengo tirria a este lenguaje, pero por una vez...) >> - Python (pero esto ya lo sabíamos): ** está, como viene siendo >> habitual, por encima de los unarios, pero por debajo de los operadores de >> indización >> - R: ^ (exponenciación), está justo por encima de + y - unarios >> - Ruby: ** está justo por encima del - unario (pero justo por debajo >> del + unario, cosas de la vida) >> >> Casos que conozco donde la precedencia de los unarios está por encima: >> Prolog, JavaScript y algunos casos patológicos como Excel (véase más abajo). >> >> En cuanto a calculadoras, he usado la que tengo más a mano (en mi >> teléfono móvil) y: >> >> -4^2 = -16 >> (-4)^2 = 16 >> >> tal como esperaba. >> >> Y en el caso de las matemáticas, don Aurelio Baldor (al que no conocía, >> por cierto) podrá cantar misa en Latín, pero cualquier de mis profesores de >> matemáticas me hubiera tirado de las orejas si se ocurre interpretar que: >> >> -x^n = (-x)^n >> >> Aunque claro, siempre me animaron a usar paréntesis para que no cupiera >> duda. >> >> Si es cuestión de sacar referencias, pues nada. Citemos Wikipedia, que a >> su vez usa como referencias "Elementary Algebra for College Students" >> (Angel Allen) y "Taschebuch der Mathematik" (Grosche, Ziegler y Ziegler): >> >> There exist differing conventions concerning the unary operator − >> (usually read "minus"). *In written or printed mathematics*, the >> expression −32 is interpreted to mean 0 − (32) = −9, but in some >> applications and programming languages, notably Microsoft Office Excel (and >> other spreadsheet applications) and the programming language bc [...] >> >> >> Las negritas son mías, pero vamos, que la norma la que decimos nosotros, >> aunque algunos lenguajes de programación han escogido usar la convención >> contraria. Y Baldor, según vd., aunque la única copia a la que tenido >> acceso es una edición de 1985-86, en la que el capítulo XV no empieza hasta >> la página 155 y no aparece un sólo número negativo. >> >> Saludos, >> Ricardo >> >> 2016-12-24 6:52 GMT-10:00 Johnny Alonso <johnny.alonso.quint...@gmail.com >> >: >> >>> Hola Ricardo y Armando, si las expresiones que muestran son código >>> Python, lamento decirles que están bastante lejos de la realidad. >>> >>> Están comparando expresiones con operadores diferentes y que el >>> resultado en ocasiones les coincida es mera casualidad. >>> En Python el operador ** es potenciación y ^ equivale a la operación XOR >>> entre bist. >>> >>> -2**2 >>> -4 >>> >>> -(2^2) >>> 0 >>> Armando ni siquiera coinciden los resultados, dándote el beneficio de la >>> duda, y utilizas el ^ como operador de potenciación, entonces: >>> La expresión -(2^2) en Python equivale a: >>> >>> -(2**2) >>> -4 >>> Aquí los resultados con el operador ** coinciden, -4 en ambos casos, y >>> lo acepto como correcto desde el punto de vista del lenguaje, pero no desde >>> el punto de vista matemático, pues matemáticamente las expresión -2² es >>> diferente a -(2²). >>> >>> Los desarrolladores de lenguajes son libres de incorporar lo que desean, >>> esto también aplica para la precedencia de operadores y el sentido de >>> evaluación de las expresiones matemáticas, pero de igual forma lo >>> documentan para que los usuarios no incurramos en errores asumiendo que >>> todos cumplen las reglas de evaluación matemática al pie de la letra. >>> >>> >>> >>> Conjetura: Python no implementa el operador menos unario, pero si el >>> binario el cual tiene menor precedencia que el de potenciación, así: >>> >>> -x**n es interpretado en Python como 0-x**n. >>> >>> >>> -2**2 >>> >>> -4 >>> >>> >>> 0 - 2**2 >>> >>> -4 >>> >>> >>> >>> Saludos, Johnny Alonso >>> >>> >>> >>> >>> >>> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero= >>> gmail....@python.org] *En nombre de *Armando Ortega >>> *Enviado el:* sábado, 24 de diciembre de 2016 6:24 a. m. >>> >>> *Para:* La lista de python en castellano >>> *Asunto:* Re: [Python-es] Python 3.5.2 >>> >>> >>> >>> Buenos días. >>> >>> Ricardo tiene razón. >>> >>> -2**2 = -(2^2) = -4 >>> (-2)**2 = -2^2 = 4 >>> >>> Un saludo. >>> >>> El 24/12/16 a las 04:54, Johnny Alonso escribió: >>> >>> Hola Ricardo, Por definición “La potencia es resultado de tomar un >>> número como factor 2 o más veces”. Aritmética de Baldor, capítulo XV, >>> Elevación a potencias y sus operaciones inversas, página 152. >>> >>> >>> >>> -2**2 = -2 * -2 >>> >>> >>> >>> Leyes de la potenciación: >>> >>> Todo número elevado a la cero es igual a 1, x**0 = 1 >>> >>> -2**0 = 1 >>> >>> >>> >>> Todo número elevado a un exponente par (múltiplo de 2) es positivo, en >>> caso contrario se mantiene el signo del número. >>> >>> -2**2 = 4 >>> >>> -2**3 = -8 >>> >>> >>> >>> Lo anterior lo puedes verificar en la calculadora de un celular IPhone o >>> Samsung, incluso en la de Windows. >>> >>> >>> >>> Es evidente que en Python es así, y lo acepto porque así está >>> documentado, pero es algo para tener en cuenta cuando programas en él. >>> >>> >>> >>> Ricardo, con respecto a las matemáticas en este caso, estas equivocado. >>> >>> >>> >>> Saludos, Johnny Alonso >>> >>> *De:* Python-es [mailto:python-es-bounces+john >>> ny.alonso.quintero=gmail....@python.org >>> <python-es-bounces+johnny.alonso.quintero=gmail....@python.org>] *En >>> nombre de *Ricardo Cárdenes >>> *Enviado el:* viernes, 23 de diciembre de 2016 5:04 p. m. >>> *Para:* La lista de python en castellano >>> *Asunto:* Re: [Python-es] Python 3.5.2 >>> >>> >>> >>> No, no es una excepción. >>> >>> >>> >>> En matemáticas, la exponenciación tiene prioridad: >>> >>> >>> >>> -x^2 = -(x^2) >>> >>> >>> >>> Los lenguajes de programación que implementan este operador, suelen >>> adherirse a la regla (Python, PHP, D, Ruby, ...). Luego tienes disidentes >>> como JavaScript, pero bueno... >>> >>> >>> >>> Así que no, Python no es "una excepción a las reglas algebraicas". >>> >>> >>> >>> Saludos, >>> >>> Ricardo >>> >>> >>> >>> 2016-12-23 5:31 GMT-10:00 Johnny Alonso <johnny.alonso.quintero@gmail. >>> com>: >>> >>> Gracias Kiko, me queda claro, es excepción a las reglas algebraicas en >>> Python. >>> >>> >>> >>> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero= >>> gmail....@python.org] *En nombre de *Kiko >>> *Enviado el:* viernes, 23 de diciembre de 2016 10:08 a. m. >>> *Para:* La lista de python en castellano >>> *Asunto:* Re: [Python-es] Python 3.5.2 >>> >>> >>> >>> >>> >>> >>> >>> El 23 de diciembre de 2016, 16:05, Kiko <kikocorre...@gmail.com> >>> escribió: >>> >>> >>> >>> >>> >>> El 23 de diciembre de 2016, 15:06, Johnny Alonso < >>> johnny.alonso.quint...@gmail.com> escribió: >>> >>> Hola todos, estoy iniciándome en Python y creo que se presenta un fallo >>> de precedencia con el operador menos unario: >>> >>> >>> -2**2 # probable error >>> >>> -4 >>> >>> >>> -2 * -2 # Ok >>> >>> 4 >>> >>> >>> pow(-2, 2) # Ok >>> >>> 4 >>> >>> >>> >>> >>> Por favor, si alguien sabe si esto está documentado podría indicarme en >>> donde lo encuentro, de lo contrario, podrían reportarlo a la fundación, yo >>> no lo se hacer. >>> >>> >>> >>> >>> >>> Se evalúa antes el operador potencia: https://docs.python.org/3/refe >>> rence/expressions.html#unary-arithmetic-and-bitwise-operations >>> >>> Antes he ido muy rápido: https://docs.python.org/3/refe >>> rence/expressions.html#the-power-operator >>> >>> >>> >>> >>> >>> >>> Saludos, JohnnyAlonso >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> >>> Python-es mailing list >>> >>> Python-es@python.org >>> >>> https://mail.python.org/mailman/listinfo/python-es >>> >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> >>> >> > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es