Проблема в том, что вы не можете вызвать (cdr (cdr (cdr lst)))
, когда lst
содержит менее 3 элементов.
Вы пометили это ракеткой, поэтому я собираюсь показать вам решение, используя match
(define (skipper l)
(match l
;; some element and at least 3 more
((list a rest ..3)
(cons a (skipper (cddr rest))))
;; at least one element
((cons a _)
(list a))
;; otherwise
(else
empty)))
(skipper '())
;; '()
(skipper '(0))
;; '(0)
(skipper '(0 1 2 3 4 5 6 7))
;; '(0 3 6)
(skipper '(0 1 2 3 4 5 6 7 8 9))
;; '(0 3 6 9)
В этом решении не используется length
, который излишне вычисляет длину списка