>>531
(defun hoge (f x n z)
(cond ((zerop n) z)
((evenp n)
(let ((y (hoge f x (/ n 2) z)))
(funcall f y y)))
(t (funcall f x (hoge f x (1- n) z)))))

(defun my-expt (x n)
(hoge #'* x n 1))

(defun my-mult (x y)
(if (< x y) (hoge #'+ y x 0)
(hoge #'+ x y 0)))

他の使いまわし方が思いつかん。