Как указано в комментариях !!
не дает вам индекс значения так, как вы ожидаете. Это просто инфикс для получения элемента списка.
Невозможно получить индекс x
, как этот, в Haskell, поскольку объект x
не отслеживает, где это так.
Чтобы исправить это, мы можем составить список объектов, которые do отслеживают, где они были. Это может быть достигнуто с помощью zip
.
zip [0..] graph
. Создается список кортежей, каждый из которых содержит свой индекс и значение в graph
.
можете написать ваш список пониманий как
[ x | (index, x) <- zip [0..] graph, index > 5, index < 10 ]
Теперь это будет не очень быстро, так как все равно нужно go пройти через каждый элемент списка, несмотря на тот факт, что мы не знаем ни одного элемента после 11-го использоваться. Для скорости мы хотели бы использовать комбинацию take
и drop
.
drop 5 (take 10 graph)
Однако, если мы хотим сделать некоторые другие выборы (например, все четные индексы), мы все еще можем go вернуться к пониманию списка.