Я пишу процедуру, которая подсчитывает количество нулей в данном списке.Этот список может иметь другой вложенный список.Алгоритм, который я придумал, был очень прост:
- Если текущий список пуст, вернуть 0
- Если текущий список является другим списком, вызовите подпрограмму для подсчета нулей в этомсписок.
- В противном случае продолжайте обход родительского списка и подсчитывайте нули, если таковые имеются.
Однако, я всегда получаю сообщение об ошибке:
=: expects type <number> as 2nd argument, given: quote; other arguments were: 0
, и я понятия не имеюкак это может бытьЕсть идеи?
Моя попытка была
(define (helper lst)
(cond ((null? lst) 0)
((= 0 (car lst)) (+ 1 (helper (cdr lst))))
(else (+ 0 (helper (cdr lst))))))
(define (count-zeroes lst)
(cond
((null? lst) 0)
(else
(if (list? (car lst))
(+ (helper (car lst)) (count-zeroes (cdr lst)))
(if (= 0 (car lst))
(+ 1 (count-zeroes (cdr lst)))
(+ 0 (count-zeroes (cdr lst))))))))
(define ll '(0 1 2 0 '(1 0 0)))
(count-zeroes ll)
Спасибо,