1) Для целочисленного деления в схеме, использовать функцию фактор, как в (фактор 9 2) дает 4.
2) для целого модуля в схеме, использовать остаточный функцию , как и в (остальной 9 2) дает 1.
Схема основана на рекурсии, как вы указали. Чтобы решить рекурсивную проблему, вы должны указать решение в терминах меньших экземпляров проблемы: «Число 6 цифр в числе N - это ...» и для ... вы заявляете решение в терминах решения части N.
Самая легкая часть N для повторения - это N/10, которая является почти последней цифрой N. Затем, чтобы решить эту рекурсию, вы должны предположить, что знаете ответ к (num (отношение N 10)). Назовите это значение X. Как знание N и X говорит вам, сколько цифр находится в N?
Если последняя цифра N равна 6, то решение равно X + 1. В противном случае решение равно X. Как вы можете определить, равна ли последняя цифра 6? Используйте оставшуюся функцию.
(define (num N)
; check cases
(cond
; case 1) negative condition
((< N 0) (num (- N)))
; case 2) zero condition, the terminal case
((= N 0) 0)
; case 3) recursive case with a 6 as the last digit
((= (remainder N 10) 6) (+ X 1))
; case 4) recursive case without a 6 as the last digit
(#t X)
))
Теперь вы просто должны заменить рекурсивное предположение в течение X, поэтому, например, случай 3 становится
; case 3
((= (remainder N 10) 6) (+ (num (quotient N 10)) 1))
Изменить X для случая 4, а также и вы получите решение.
Это фантастика! Спасибо огромное! – IamDaniel
@ user2780598 В любое время, если вы найдете мой ответ полезным, вы можете проверить чек рядом с моим ответом, он помечает вопрос как решенный и снимает его с списка оставшихся без ответа вопросов. – jozefg