Хорошо. Поэтому мне интересно, как создать функцию, которая превратит случайное число в его компонент английского слова.(SCHEME) Номер -> Английский Список
Такие, как (1001 -> «(одна тысяча) или 0 ->» (ноль) и (имя-номер факториал 20 -> «(два нониллион четыреста тридцать два квадриллиона девятьсот два триллиона восемь миллиардов сто семьдесят шесть миллионов шестьсот сорок тысяч))
Я работал с предыдущим пользователем в stackoverflow, чтобы получить то, что превратилось в длинное число на 3 части (1 341 100 - один миллион, 341 тыс. 1 сто 0 десятков 0 единиц)
#lang r5rs
(define (three-names n)
(if (zero? n)
"zero"
(let loop ((n n)
(units '((10 one) (10 ten) (10 hundred) (1000 thousand) (1000 million) (1000 billion) (1000 trillion) (1000 quadrillion) (1000 quintillion)
(1000 sextillion) (1000 septillion) (1000 octillion) (1000 nonillion)
(1000 decillion) (1000 undecillion) (1000 duodecillion) (1000 tredecillion)
(1000 quatturodecillion) (1000 sexdillion) (1000 septendecillion) (1000 octodecillion)
(1000 novemdecillion) (1000 vigintillion)))
(ARRAY '()))
(if
(or (zero? n) (null? units))
ARRAY
(let* ((unit (car units)) (div (car unit)) (english (cadr unit)))
(let
((q (quotient n div)) (r (remainder n div)))
(loop q
(cdr units)
(cons r (cons english ARRAY)))))))))
Единственное, что я понимаю прямо сейчас, чтобы сделать это так, что есть ценности для 0-20:
(= x 0) zero
(= x 1) one
...
(> x 1000) thousand
(> x 1000000) million
Но для того, они не будут выводиться в список и два, не знаю, что еще делать?
И как это отличается от вашего предыдущего вопроса [] (http://stackoverflow.com/q/35530887/201359)? –
Выход аналогичен, но очень отличается.Вместо того, чтобы иметь 3 числа, за которыми следует местозаполнитель (тысячи или десятки), возвращается вся строка – Anitun