Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.08 KB | None | 0 0
  1.  
  2. (defparameter *digits* "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  3.  
  4. (defun print-positive-integer (integer base stream)
  5.   (let ((factor (log 2d0 (float base 1d0)))
  6.         (digits *digits*))
  7.     (labels ((upper (integer)
  8.                (if (< integer base)
  9.                    (princ (schar digits integer) stream)
  10.                    (let* ((binary-length (integer-length integer))
  11.                           (length (max 2 (floor (* factor binary-length))))
  12.                           (length/2 (floor length 2))
  13.                           (divisor (expt base length/2)))
  14.                      (upper (floor integer divisor))
  15.                      (lower (mod integer divisor) length/2))))
  16.              (lower (integer length)
  17.                (if (= length 1)
  18.                    (princ (schar digits integer) stream)
  19.                    (let* ((length/2 (floor length 2))
  20.                           (divisor (expt base length/2)))
  21.                      (lower (floor integer divisor) (- length length/2))
  22.                      (lower (mod integer divisor) length/2)))))
  23.       (upper integer))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement