Po pierwsze, jeśli potrzebujesz indeksu podczas przetwarzania listy, jest to pewny znak, że wdrażasz nieoptymalny algorytm, ponieważ lista nie jest strukturą opartą na indeksie, taką jak tablica. Jeśli chcesz zajmować się indeksami, lepiej zamiast tego użyj opcji vector.
chodzi rzeczywisty pytanie, można powiązać pozycje listy z zwiększając ints z następującego kodu, a następnie map na skutek:
Prelude> zip [0..] "a+bc?|(de)*fg|h" :: [(Int, Char)]
[(0,'a'),(1,'+'),(2,'b'),(3,'c'),(4,'?'),(5,'|'),(6,'('),(7,'d'),(8,'e'),(9,')'),(10,'*'),(11,'f'),(12,'g'),(13,'|'),(14,'h')]
Posiadanie indeksów do Państwa dyspozycji jest dość powszechnym wymogiem podczas przetwarzania list (np. Do zgłaszania błędów). –
Istnieje wiele zastosowań indeksu podczas przetwarzania listy, która nie ma nic wspólnego z użyciem nieoptymalnego algorytmu. Jest to bardzo niepewny znak. –