versiones tipado programacion inteligencia funcional ejemplos descargar caracteristicas artificial aprende haskell sharing

haskell - tipado - ¿Una buena forma de evitar "compartir"?



tipado en haskell (1)

En este caso, su lista de pidigits es una constante (o "formulario de aplicación constante"), y es probable que GHC lo haga flotar, lo calcule una vez y lo comparta entre usos. Si no hay referencias a la CAF, será basura recolectada.

Ahora, en general, si desea que se recalcule algo, conviértalo en una función (por ejemplo, agregando un parámetro ficticio). Ejemplos en la pregunta vinculada sobre CAF: ¿Cómo hacer una CAF no una CAF en Haskell?

Supongamos que alguien traduzca este simple código de Python a Haskell:

def important_astrological_calculation(digits): # Get the first 1000000 digits of Pi! lucky_numbers = calculate_first_digits_of_pi(1000000) return digits in lucky_numbers

Versión Haskell:

importantAstrologicalCalculation digits = isInfixOf digits luckyNumbers where luckyNumbers = calculateFirstDigitsOfPi 1000000

Después de trabajar con la versión de Haskell, el programador se sorprende al descubrir que su versión de Haskell "filtra" la memoria: después de la primera vez que se llama a su función, luckyNumbers nunca se libera. Eso es preocupante ya que el programa incluye algunas funciones más similares y la memoria consumida por todas ellas es significativa.

¿Hay una manera fácil y elegante de hacer que el programa "olvide" luckyNumbers ?