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
?