usando una resueltos prefija postfija posfija pilas para notacion infija expresión expresion evaluar ejercicios arboles algoritmo scala associative infix-notation

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 ?