Convertir números a la lista de letras en inglés

Tengo la siguiente función que convierte una entrada de números en la salida de palabra parcialmente traducida de esos números.

Usando el producto y el cociente, agrega la representación de palabras de los números mientras divide el número en grupos.

Por ejemplo:

(number-name 87969087) -> '(87 million 969 thousand 87)
(number-name 1000000) -> '(1 million)

Estoy tratando de completar mi problema traduciendo completamente esos números que son menos de 1000 también. Estoy tratando de implementar una función menor que 1000 que mostrará esos números más pequeños a medida que la lista también se está construyendo. Junto a:

;; for less than 1000
; state words for 1-19
(define baseNumbers '(one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen))

y

; state words for multiples of ten
(define multiples '(twenty thirty forty fifty sixty seventy eighty ninety))

entonces

(number-name 1110) -> '(one thousand one hundred ten)

También ha sido difícil encontrar una forma de mostrar una entrada de 0 para que se muestre como cero de tal manera que el cero no se muestre si la entrada es otra cosa que 0.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~

(define (number n)
  (define units '(thousand million billion trillion quadrillion))
  (define (nsplit n units acc lst)
    (define q (quotient n 1000))
    (define r (remainder n 1000))
    (if (zero? n) lst
        (cond [(zero? acc)
               (if (zero? r)
                   (nsplit q units (add1 acc) lst)
                   (nsplit q units (add1 acc) (cons r lst)))]
              [(zero? r)
               (nsplit q (cdr units) acc lst)]
              [else
               (nsplit q (cdr units) acc (cons r (cons (car units) lst)))])))
  (nsplit n units 0 empty))