2012-08-08 15 views
7

Voglio utente sia in grado di inserire in questo modo:Come convertire il codice matematico infix user-friendly nel codice Clojure?

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

, ti vengono convertiti a questo:

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

, così posso eval a qualche funzione che verrà JITted e eseguito in modo efficiente in seguito.

Sono già disponibili librerie (con priorità operatore) che funzionano già in Clojure aggiornato?

+0

Sono sicuro che ci sono una dozzina di esempi in Antlr che è possibile raccogliere e utilizzare con una piccola modifica. – Bill

risposta

7

il pacchetto Incanter includono un module for doing infix math

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

e altri hanno written packages.

+0

La richiesta di spazi sembra essere un po 'restrittiva. E mi aspetto una stringa come input (qui ho anche bisogno di pasticciare con 'read'). –

+0

Ho provato clojuire-infix, ma sembra essere abandonware (è per questo che ho incluso la clausola "Clojure up-to-date"). –

+0

@Vi. Non puoi semplicemente analizzare automaticamente la stringa per aggiungere uno spazio attorno a tutti gli operatori? –

Problemi correlati