(DE REWRITE (L)
   (COND
      ((ATOM L) L)
      ((EQUAL (CAR L) 'NOT)
         (LIST 'NAND
            (REWRITE (CADR L)) T))
      ((EQUAL (CAR L) 'AND)
         (LIST 'NAND
            (REWRITE (CADR L))
            (REWRITE (CADDR L))
            T))
      ((EQUAL (CAR L) 'OR)
         (LIST 'NAND
            (LIST 'NAND (REWRITE (CADR L)) T)
            (LIST 'NAND (REWRITE (CADDR L)) T)))
      ((EQUAL (CAR L) 'XOR)
         (LIST 'NAND
            (LIST 'NAND
               (LIST 'NAND
                  (LIST 'NAND (REWRITE (CADR L)) T)
                  (LIST 'NAND (REWRITE (CADDR L)) T))
               (LIST 'NAND
                  (REWRITE (CADR L))
                  (REWRITE (CADDR L))))
            T))
      (T (LIST 'ERROR L))))
