scala - una - notacion infija a postfija en java
¿Cómo hacer un operador infijo asociativo a la derecha? (1)
A encontré una solución. La referencia de Scala dice en 6.12.3 Operaciones de Infix :
La asociatividad de un operador está determinada por el último carácter del operador. Los operadores que terminan en dos puntos '':'' son asociativos por derecho. Todos los demás operadores son asociativos por la izquierda.
Por lo tanto, fue suficiente para cambiar el nombre de >> a >>:
Me tomó algo de tiempo darme cuenta de que mientras a >> b se desgasta en a.>>(b) , a >>: b se desugara en b.>>:(a) . Así que tuve que definir >>: como
def >>:(x: T): T = x >> this
Tengo una operación asociativa >> . El problema es que su costo depende linealmente del tamaño de su operando izquierdo. Así que una expresión formada por una secuencia de n aplicaciones de >> like
a >> a >> a >> a >> a >> ... >> a
tiene un costo cuadrático en términos de n , porque por defecto los operadores de infijo son left-associative . ¿Cómo hacer que sea asociativo correcto para que el costo de tal expresión se mantenga lineal en términos de n ?