Если вы стремитесь сгенерировать последовательность 1, 5, 9,… , вы можете записать это как:
[1, 5 .. ]
Действительно, это генерирует список вроде:
Prelude> [1, 5 .. ]
[1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,…
Если вы хотите получить элементы по этим индексам, вам, вероятно, не понадобится n
. n здесь " итератор ", так сказать, он говорит, что для каждого n мы получаем доступ к 4 × n + 1 элемент, поэтому вы каждый раз «пропускаете» три элемента:
obtain4_1 :: [a] -> [a]
obtain4_1 [] = []
obtain4_1 (x:xs) = x : go xs
where go (_:_:_:ys) = obtain4_1 ys
go _ = []
Для списка элементов [1..]
это дает нам те же значения:
Prelude> obtain4_1 [1..]
[1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,…