Вы вводите код в области взаимодействия.
Не. Введите его в область исходного кода и загрузите его. Тогда это работает.
Что происходит, функция count
уже существует, и вы переопределяете ее. Но если вы сделаете это в области взаимодействий, ваша новая функция будет использовать уже существующую, а не рекурсивно вызывать себя так, как следовало бы:
(define (count val l)
(if (null? l)
0
(+
(if (= (first l) val) 1 0)
(count val (rest l)) ;; ****** HERE
)
)
)
И существующая функция ожидает процедуру в качестве первого аргумента , как видно из документации.