anchor.diff: +(defmacro get (arr i)
  +  (concat "(" (translate arr) ")[" (translate i) "]"))
  +
  +(defmacro set (arr i val)
  +  (concat "(" (translate arr) ")[" (translate i) "] = " (translate val)))
  +
   (defmacro if (arg truebody falsebody)
     (concat
      "(function(){"
  
positive.code:    (indent (translate body))
     "};"))
  
  (defmacro > (lhs rhs)
    (concat "(" (translate lhs) " > " (translate rhs) ")"))
  
  (defmacro < (lhs rhs)
    (concat "(" (translate lhs) " < " (translate rhs) ")"))
  
  (defmacro = (lhs rhs)
    (concat "(" (translate lhs) " === " (translate rhs) ")"))
  
  (defmacro != (lhs rhs)
    (concat "(" (translate lhs) " !== " (translate rhs) ")"))
  
  (defmacro not (exp)
    (concat "(!" (translate exp) ")"))
  
negative.code:   (concat "var " (translate name) " = " (translate value) ";\n"))
  
  (defmacro setf (name value)
    (concat (translate name) " = " (translate value) ";\n"))
  
  (defmacro list (&rest args)
    (concat "[ " (join ", " (map args translate)) " ]"))
  
  (defmacro apply (fn arglist)
    (macros.send fn 'apply 'undefined arglist))
  
  (defmacro macro-list ()
    (concat "["
  	  (indent (join ",\n"
  			(map (-object.keys macros)
  			     macros.quote)))
  	  "]"))
  
  (defmacro macroexpand (name)
    (let ((macro (get macros name)))
      (if macro (send macro to-string) "undefined")))
  