 
   eval_expr: (expr) ->
     switch expr.constructor.name
+      when 'SpecialForm'
+        args = expr.args
+        switch expr.name
+          when 'cond'
+            ret = args.filter((arg) => !(@eval_expr(arg.values[0]) instanceof Nil))[0]?.values[1] || new Nil
       when 'CallFun'
         args = expr.args.map (arg) => @eval_expr(arg)
         switch expr.funname

        return @list()
      else #atom
        return @atom()
    else if @expects '(', false #calling function
      return @call_fun()
    else #atom
      return @atom()

    @forwards '('
    args = []
    funname = @fun_name()

    isSP = SpecialForm.NAMES.indexOf(funname) != -1
    until @expects ')', false
      @skip()
      args.push if isSP then @list() else @expr()

    @forwards ')'

    klass = if isSP then SpecialForm else CallFun
    return new klass(funname, args)

  expr: ->
    if @expects "'", false #value
