2012-08-08 11 views
7

Quiero usuario sea capaz de entrada de la siguiente manera:¿Cómo convertir un código infijo fácil de usar a código Clojure?

5+6*t+sin(2*t) 

, por lo que pueden ser convertidos a esto:

(+ 5 (* 6 t) (sin (* 2 t))) 

, por lo que puede eval a alguna función que se compilados JIT y ejecutado eficientemente más tarde.

¿Ya hay bibliotecas disponibles (con prioridades de operador) que funcionen ya en Clojure actualizado?

+0

Estoy seguro de que hay una docena o más de ejemplos para eso en antlr que puedes recoger y usar con una pequeña modificación. – Bill

Respuesta

7

el paquete embrujamiento incluyen un module for doing infix math

user> ($= 7 + 8 - 2 * 6/2) 
9 

y otros tienen written packages.

+0

Requerir espacios parece ser un poco restrictivo. Y espero cadena como entrada (aquí también necesito meterme con 'leer'). –

+0

Intenté clojuire-infix, pero parece ser abandware (es por eso que incluí la cláusula "works in current Clojure"). –

+0

@Vi. ¿No puedes analizar automáticamente la cadena para agregar un espacio alrededor de todos los operadores? –

Cuestiones relacionadas