Задача на листы в хаскеле

Нужно написать функцию которая буде удалять элементы листа с индексами которые являются простыми. Главная проблема в том что я не понимаю как работать с индексами в хаскеле.


Ответы (1 шт):

Автор решения: extrn

Обращаться к элементу списка по индексу позволяет оператор !!:

Prelude> "test" !! 1
'e'
Prelude> ["x", "y", "z"] !! 2
"z"

Но делать этого вам не придется, хотя бы потому, что каждое такое обращение занимает линейное время.

Проще всего будет использовать генератор списка. Например, так можно отфильтровать элементы с нечетными индексами.

Prelude> [x | (i, x) <- zip [0 ..] ['a' .. 'z'], even i]
"acegikmoqsuwy"

или то же самое в виде композиции преобразований

Prelude> map snd . filter (even . fst) . zip [0 ..] $ ['a' .. 'z']
"acegikmoqsuwy"
→ Ссылка