(define (hex x) (if (number? x) (if (zero? x) "0" (let y ((x x) (j 0)) (if (zero? (modulo x 16)) (y (/ x 16) (+ j 4)) (string-append (number->string x 16) (if (> j 0) (string-append "∙2^" (number->string j 10)) ""))))) (if (pair? x) (cons (hex (car x)) (hex (cdr x))) '()))) ; Bounds on Nd and N. (let* ((ls arithmetic-shift) (p2 (lambda (n) (ls 1 n))) (÷ quotient)) (list 'N (let sc ((minN (p2 20)) (maxN 0) (minNd (p2 64)) (j (p2 10))) (if (< j (p2 11)) (let ((N (÷ (p2 20) (+ j 1)))) (sc (min minN N) (max maxN N) (min minNd (* N (ls j 42))) (+ j 1))) (hex (list minN maxN minNd)))))) ; => (N ("2∙2^8" "3ff" "3fd92∙2^44"))