Что-то вроде этого может делать ваши цифры скорее арифметически, чем в виде строки:
(define (digits n)
(if (zero? n)
'()
(cons (remainder n 10) (digits2 (quotient n 10))))
В любом случае, idk, если это то, что вы делаете, но этот вопрос заставляет меня думать о Project Euler.И если это так, вы оцените обе эти функции в будущих задачах.
Выше приведена сложная часть, а остальное:
(foldr + (digits 12345) 0)
ИЛИ
(apply + (digits 1234))
РЕДАКТИРОВАТЬ - я избавился от intLength
выше, но на случай, если вы все еще хотите его.
(define (intLength x)
(define (intLengthP x c)
(if (zero? x)
c
(intLengthP (quotient x 10) (+ c 1))
)
)
(intLengthP x 0))