(%compile-defvar ',name))
       (setq ,name ,value)))
 
-  (defmacro defvar (name value)
+  (defmacro defvar (name &optional value)
     `(%defvar ,name ,value))
 
  (defmacro %defun (name args &rest body)
        (%defun ,name ,args ,@body)
        ',name))
 
-  (defmacro defvar (name value)
+  (defmacro defvar (name &optional value)
     `(progn
        (%defvar ,name ,value)
        ',name))
   (defun reverse (list)
     (reverse-aux list '()))
 
-  (defmacro incf (x)
-    `(setq ,x (1+ ,x)))
+  (defmacro incf (x &optional (delta 1))
+    `(setq ,x (+ ,x ,delta)))
 
-  (defmacro decf (x)
-    `(setq ,x (1- ,x)))
+  (defmacro decf (x &optional (delta 1))
+    `(setq ,x (- ,x ,delta)))
 
   (defun list-length (list)
     (let ((l 0))