Estaba jugando con this código kata en Haskell, y me encontré con la pregunta en el tema.Obtener el centro de un rango Ix en O (1) tiempo en Haskell
Es trivial encontrar el punto medio de una matriz cuyos índices son un único valor numérico, pero los índices de matriz de Haskell pueden ser cualquier instancia de la clase de tipo Ix, incluida, por ejemplo, la tupla (Int, Word, Card) donde la tarjeta es una instancia de Ix pero no de Num.
Una forma de obtener el punto medio de la matriz es consultar su longitud, consultar la lista de índices y soltar la mitad de esa lista, pero esto requiere O (n) tiempo.
¿Alguien sabe de una manera de indexar para hacerlo en tiempo constante? Siento que debería haber uno, ya que se supone que un rango Ix debe biject con un rango entero.
Si hay realmente existe una biyección, entonces ¿por qué se asigna a números enteros, calcular el punto medio y luego tomar la inversa para trazar de nuevo a su tipo de índice ? No tengo idea de qué tipo de mecanismo permitiría esto en Haskell, pero parece posible. – Gian
La función 'index' en la clase' Ix' es una parte de la biyección, mapeando índices a enteros, pero la otra falta, por lo que yo sé. – yatima2975