2012-08-08 19 views
7

chcę użytkownika, aby móc wprowadzić tak:Jak przekonwertować przyjazny dla użytkownika kod matematyczny do kodu Clojure?

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

, więc zostanie on przekształcony do tego:

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

, więc mogę eval go do niektórych funkcji, które zostaną JITted i wykonane wydajnie później.

Czy są już dostępne biblioteki (z priorytetami operatora), które działają w aktualnym Clojure już?

+0

Jestem pewna, że ​​istnieje kilkanaście przykładów tego w antlr, które można pobrać i użyć z małą modyfikacją. – Bill

Odpowiedz

7

pakiet Incanter obejmują module for doing infix math

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

i inni written packages.

+0

Wymóg spacji wydaje się nieco ograniczony. I spodziewam się, że łańcuch znaków jako dane wejściowe (tutaj również muszę zignorować "odczyt"). –

+0

Próbowałem clojuire-infix, ale wydaje mi się, że to abandonware (dlatego zawarłem "działa w aktualnej klauzuli Clojure"). –

+0

@Vi. Nie możesz po prostu automatycznie przeanalizować łańcucha, aby dodać przestrzeń wokół wszystkich operatorów? –

Powiązane problemy