#121
Universal Computation Engine
 

Difficulty:Medium
Topics:functions


Given a mathematical formula in prefix notation, return a function that calculates the value of the formula. The formula can contain nested calculations using the four basic mathematical operators, numeric constants, and symbols representing variables. The returned function has to accept a single parameter containing the map of variable names to their values.
test not run
(= 2 ((__ '(/ a b))
                         '{b 8
                           a 16}))
test not run
(= 8 ((__ '(+ a b 2))
                         '{a 2
                           b 4}))
test not run
(= [6 0 -4]
                      (map (__ '(* (+ 2 a)
                                    (- 10 b)))
                           '[{a 1
                              b 8}
                             {b 5
                              a -2}
                             {a 2
                              b 11}]))
test not run
(= 1 ((__ '(/ (+ x 2)
                                  (* 3 (+ y 1))))
                         '{x 4
                           y 1}))


Code which fills in the blank: