anchor.diff:     (indent (translate body))
      "};"))
   
  -(defmacro > (lhs rhs)
  -  (concat "(" (translate lhs) " > " (translate rhs) ")"))
  +(defmacro infix (lhs operator rhs)
  +  (concat "(" (translate lhs) " " operator " " (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 >  (lhs rhs) (macros.infix lhs ">" rhs))
  +(defmacro <  (lhs rhs) (macros.infix lhs "<" rhs))
  +(defmacro <= (lhs rhs) (macros.infix lhs "<=" rhs))
  +(defmacro >= (lhs rhs) (macros.infix lhs ">=" rhs))
  +(defmacro =  (lhs rhs) (macros.infix lhs "===" rhs))
  +(defmacro != (lhs rhs) (macros.infix lhs "!==" rhs))
   
   (defmacro not (exp)
     (concat "(!" (translate exp) ")"))
  
positive.code:   (concat "var " (translate name) " = " (translate value) ";\n"))
  
  (defmacro setf (name value)
    (concat (translate name) " = " (translate value) ";\n"))
negative.code: (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(){"
  