Вы не должны использовать make-discussion
в своем решении, мы пытаемся обойти структуры, а не создавать новые. Следует рассмотреть два случая:
- Если список
digressions
пуст, значит, мы нашли одну вершину c, а go больше некуда. - В противном случае мы считаем одну вершину c (текущую) и вызываем рекурсию по всем элементам в списке
digressions
, складывая их результаты. Это легко реализовать, используя apply
и map
Вот что я имею в виду:
(define (count-topics d)
(cond
[(empty? (discussion-digressions d)) 1]
[else (add1 (apply + (map count-topics (discussion-digressions d))))]))
Конечно, вы можете решить эту проблему без использования apply
и map
, но для этого лучше писать отдельные процедуры, как предлагает Алекс. В любом случае мой подход работает так, как ожидалось:
(count-topics
(make-discussion "music"
(list (make-discussion "politics" empty))))
=> 2