Функция числа (номер два one (один два три) -> 123
После решениякак пишется число в ракетке? (SpellNum) Сейчас я пытаюсь написать функцию, противоположную этой функции. т.е.
(tonumber ‘(one two three) --> 123
до сих пор я написал этот рабочий код
(define (symbol->digit n)
(case n
('zero 0)
('one 1)
('two 2)
('three 3)
('four 4)
('five 5)
('six 6)
('seven 7)
('eight 8)
('nine 9)
(else (error "unknown symbol:" n))))
(define (numlist n)
(map symbol->digit n))
(numlist '(one two three))
Из списка я получил '(1 2 3). Но есть проблема в функции ниже, в которой я хочу преобразовать список в число
(define (list->number l)
(set! multiplier (* 10 (lenght l)))
(for/list [(c l)]
(* multiplier c))
(set! multiplier (/ multiplier 10)))
(list->number '(1 2 3))
любая помощь будет оценена. Я не могу найти документацию по всем видам петель онлайн. вhttp://docs.racket-lang.org/ts-reference/special-forms.html?q=loop#%28part._.Loops%29
Я хочу познакомиться с Racket, поэтому я хочу избежать встроенных функций преобразования. В списке -> число, я пытаюсь взять цифры один за другим из списка, а затем я хочу умножить их на 10 100 000, поэтому в зависимости от длины списка. так что он может вернуть номер. Например '(1 2 3) = 1 * 100 + 2 * 10 + 3 * 1