In the following, (FOO) should evaluate to 50, but actually evaluates
to 90 because BAR's A binding has overwritten FOO's. Should they not
have separate bindings?

  (progn
    (let ((a 5))
      (defun foo () (* 10 a)))
    (let ((a 9))
      (defun bar () (* 100 a))))  
  
  var a = 5;
  function foo() {
      return 10 * a;
  };
  var a = 9;
  function bar() {
      return 100 * a;
  };

Daniel