数字の入力をその数字の部分的に翻訳された単語出力に変換する以下の機能があります。数字を英語の文字リストに変換する
プロダクトと商を使用して、数値をグループに分割しながら単語の表現を追加します。例えば
:
(number-name 87969087) -> '(87 million 969 thousand 87)
(number-name 1000000) -> '(1 million)
Imは完全にも1000未満であるこれらの数字を翻訳することによって、私の問題を完了しようとしています。私はリストが構築されているので、それらの小さい数字を表示する1000より小さい関数を実装しようとしています。並ん:
;; 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))
と
; state words for multiples of ten
(define multiples '(twenty thirty forty fifty sixty seventy eighty ninety))
ので
(number-name 1110) -> '(one thousand one hundred ten)
その方法でそうすることでもゼロとして表示するために0の入力を表示する方法を考え出すことは困難で入力が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))