-;; TODO: Use MACROLET when it exists
-(defmacro define-variadic-op (operator initial-value)
- (let ((init-sym (gensym))
- (dolist-sym (gensym)))
- `(defun ,operator (&rest args)
- (let ((,init-sym ,initial-value))
- (dolist (,dolist-sym args)
- (setq ,init-sym (,operator ,init-sym ,dolist-sym)))
- ,init-sym))))