Saltar al contenido

Encuentra el elemento máximo y el índice de una lista en Haskell

Después de consultar con expertos en el tema, programadores de diversas áreas y profesores dimos con la solución a la pregunta y la dejamos plasmada en esta publicación.

Solución:

Es por un pequeño error en tu código. Tu tienes:

where (t, ti) = pmaxim xs (ti + 1)

… pero en realidad debería ser:

where (t, ti) = pmaxim xs (xi + 1)

Esto corrige su código, que ahora produce la solución correcta:

>>> maxim [1, 2, 3, 2, 1]
(3, 2)

Su código se colgó porque su cálculo para ti da como resultado un ciclo sin fin ya que accidentalmente lo definiste en términos de sí mismo. Tenga en cuenta que ghc es un compilador lo suficientemente inteligente y se da cuenta de que t no depende del valor de tipor lo que su versión aún podría calcular con éxito el valor máximo incluso si no puede calcular el índice.

La forma estándar de depurar cálculos puros es la Debug.Trace módulo.

Como nota al margen, hay una solución mucho más simple:

import Data.List
import Data.Ord

maxi xs = maximumBy (comparing fst) (zip xs [0..])

Editar: Vaya, no vi que lo estabas implementando deliberadamente desde cero, pero lo dejaré ahí.

Sección de Reseñas y Valoraciones

Al final de todo puedes encontrar las observaciones de otros administradores, tú incluso tienes la habilidad dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *