Chcę utworzyć funkcję, która filtruje indeks nieparzysty.

(filter-idx '(0 1 2 3 4)) => '(1 3)
(filter-idx '(#\a #\b #\c (0 1))) => '(#\b (0 1))

Tak zrobiłem, ale to nie działa..

(define (filter-idx xs) 
(memf (lambda (x)
(= (remainder x 2) 1))
xs))
1
zion 26 listopad 2018, 16:09

1 odpowiedź

Najlepsza odpowiedź

Musisz oddzielnie obsługiwać indeksy i elementy. Oto jeden ze sposobów na zrobienie tego:

(define (filter-idx xs)
  (for/list ([i (range (length xs))] ; iterate over indexes of elements
             [x xs]                  ; iterate over elements of list
             #:when (odd? i))        ; filter elements in odd indexes
    x)) ; create a list with only the elements that meet the condition

Na przykład:

(filter-idx '(0 1 2 3 4))
=> '(1 3)
(filter-idx '(#\a #\b #\c (0 1)))
=> '(#\b (0 1))
3
Óscar López 26 listopad 2018, 23:51