(in-package :cl-user) (defun mul (a b) (if (< a 0) (setq a (- a) b (- b))) (let ((r 0)) (loop until (zerop a) do (unless (zerop (logand 1 a)) (incf r b)) (setq a (ash a -1) b (+ b b))) r)) #+PLZ (defun * (a b) (when (< a 0) (setq a (- a) b (- b))) (let ((r 0)) (while a (when (logand 1 a) (incf r b)) (setq a (asr a) b (+ b b)))))