Мое решение, я следовал за комментарием @lbruder, но мне не ясно, почему 1 появляется в вашем выводе, так как, если вы проверяли на меньшее и равное 2, должно появиться также
> (define (occurences lst)
(cond ((null? lst) empty)
((< (length (filter (lambda (x) (if (= x (car lst)) x #f)) lst)) (car lst)) (cons (car lst) (occurences (filter (lambda (x) (if (not (= x (car lst))) x #f)) lst))))
(else (occurences (filter (lambda (x) (if (not (= x (car lst))) x #f)) lst)))))
> (occurences '(1 2 3 2 3 4 4 5 5 5 5 5 5))
(3 4)
- число 1 вхождение 1 -> ложное 1! <1 </li>
- число 2 вхождение 2 -> ложное 2! <2 </li>
- число 3 вхождение 2 -> истина 2 <3 </strong>
- число 4 вхождение 2 -> истинное 2 <4 </strong>
- число 5 вхождение 6 -> ложное 6! <5 </li>
Следовательно (3 4)
Под !<
я имею в виду не меньше (больше или равно)