     
     if cdr instanceof Array and cdr.length > 0
       return cdr[1..]
-
+  
+  # TODO: make (apply ((lambda (n) (lambda (x) (+ x n))) 10) '(20)) properly close over n.
   LAMBDA: (parameterNames, body...)->
     # replace body's references to strings defined in parameterNames array
     # with arguments passed into resulting javascript function

      traces = traces.concat(funcName) for funcName in funcNames when (funcName not in traces)
      funcNames
    else
      traces
  FUNCTION: (name)->
    # convert name to functor (typeof == function)
    funcObj = this.getFunc(name)

    
    # Macros & Regular Functions
    # look for method named in sexp[0] in stack (e.g. foo)
    # failing that, eval first item in list, must return function (e.g. (lambda (x) x))
    funcObj = this.getFunc(sexp[0]) || _eval.call(this, sexp[0])
    func = funcObj.callable if funcObj?
    throw {message: "EVAL: undefined function #{sexp[0]}", aLispStack: util.inspect(stack, false, 3)} unless func? and (typeof(func) == 'function')
