Supongamos que alguien se traduciría este código Python sencilla a Haskell:¿Una buena manera de evitar "compartir"?
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
Haskell versión:
importantAstrologicalCalculation digits =
isInfixOf digits luckyNumbers
where
luckyNumbers = calculateFirstDigitsOfPi 1000000
Después de trabajar con la versión Haskell, el programador se sorprende al descubrir que su versión Haskell filtraciones" "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 alguna manera fácil y elegante de hacer que el programa "olvide" luckyNumbers
?
elegante, pero ¿qué ocurre si agrega '{- # NOINLINE importantAstrologicalCalculation # -}'? –
Hubo una pregunta recientemente, preguntando aparentemente lo mismo, pero usando terminología más avanzada. Es posible que desee echarle un vistazo: http://stackoverflow.com/questions/6090932/how-to-make-a-caf-not-a-caf-in-haskell – Rotsor