   constructor: (@funname, @args) ->
   toString: -> "(#{@funname} #{@values.map((v) -> v.toString()).join(' ')})"
 
-SF_NAMES = ['cond', 'quote', 'lambda', 'defun']
+# TODO: 下の実装と離れてしまっているのをどうにかしたい
+SF_NAMES = ['cond', 'quote', 'lambda', 'defun', 'setq', 'defmacro']
 class SpecialForm
   constructor: (@name, @args) ->
   toString: -> "(#{@name} #{@args.map((v) -> v.toString()).join(' ')})"

            @exec_lambda(funname)
          when 'Symbol'
            funcs = {
              '+': -> args.reduce(((sum, n) -> sum + n), 0),
              'car': -> args[0].values[0]
              'cdr': -> new List args[0].values[1..]
              'cons': -> new List [args[0], args[1].values...]

    envstack.push new Environment(lambda.params.values.reduce(
      ((env, param, index) -> env[param.name] = args[index]; env), {}))
    [name, args...] = lambda.body.values
    ret = @eval_expr(new CallFun(name, args)) #TODO: とりあえず
    envstack.pop()
    return ret

