Edit in JSFiddle

// eval part
var evaluate = function(x, env) {
  if (Array.isArray(x)) {
    var exps = x.map(function(exp) {return evaluate(exp, env);});
    var proc = exps.shift();
    return proc.apply(null, exps);
  } else {
    var y = env[x];
    return y !== undefined ? y : x;
  }
};
// library
var globalEnv = {
  '+': function(a, b) {return a + b;},
  '-': function(a, b) {return a - b;},
  '*': function(a, b) {return a * b;},
  '/': function(a, b) {return a / b;},
  'mod': function(a, b) {return a % b;}
};
// usage
d3.select('#out').text(
  evaluate(['*', ['+', 1, 2],['-', 8, 3]], globalEnv)
);
Result: <span id='out' />