Во-первых, мы должны понять, что задает вопрос: он просит вас написать процедуру, которая подсчитывает, сколько раз числа 4, 6 или 9 появляются в другом введенном числе.Например, ввод 10345
должен вернуть 1
.Давайте посмотрим, почему:
Цифрами 10345
являются 1
, 0
, 3
, 4
и 5
.Мы должны спросить: «Сколько раз 4
, 6
или 9
появляются?»Ну, нет 6
или 9
в 10345
.Однако есть один 4
.Следовательно, процедура должна вернуть 1
.
Другой пример: (digit-count 14289)
Давайте разберем его, как мы делали раньше.Цифры 14289
: 1
, 4
, 2
, 8
и 9
.Там нет 6
х.Однако есть 1
и 9
.Как много?Существует один 1
и один 9
.Поскольку присутствуют две (всего) требуемых цифр (требуемые цифры 4
, 6
и 9
), (digit-count 14289)
должен вернуть 2
.
Еще несколько примеров:
(digit-count 144)
-> 2
(есть два 4
)
(digit-count 1)
-> 0
(нет 4
, 6
или 9
)
(digit-count 1262)
-> 1
(есть один 6
)
Теперь давайте начнем определение.Мы можем воспользоваться функцией appearances
, которая принимает два входа и возвращает количество раз, когда первый вход появляется во втором.Например: (appearances 'a 'amsterdam)
возвращает 2
, потому что есть два a
в amsterdam
.
Используя appearances
, вот наше определение (наконец-то!):
(define (count469 num)
(+ (appearances 4 num)
(appearances 6 num)
(appearances 9 num)))
Эта функция возвращает сумму appearances
из 4, appearances
из 6 и appearances
из 9. Пожалуйста, не стесняйтесь отвечать с любыми отзывами или вопросами!