Przypuśćmy, że ktoś przetłumaczyć ten prosty kodu Pythona do Haskell: WersjaDobry sposób na uniknięcie "udostępniania"?
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:
importantAstrologicalCalculation digits =
isInfixOf digits luckyNumbers
where
luckyNumbers = calculateFirstDigitsOfPi 1000000
Po pracy z wersją Haskell, programista jest zdumieniem odkrywa, że jego wersja Haskell „przecieki "pamięć - po raz pierwszy jego funkcja jest wywoływana, luckyNumbers
nigdy się nie zwalnia. To niepokojące, ponieważ program zawiera kilka bardziej podobnych funkcji, a pamięć konsumowana przez nich wszystkich jest znacząca.
Czy istnieje prosty i elegancki sposób, aby program "zapomnieć" luckyNumbers
?
Nie elegancki, ale co się stanie, jeśli dodasz '{- # NOINLINE importantAstrologicalCalculation # -}'? –
Było ostatnio pytanie, zadając podobno to samo, ale używając bardziej zaawansowanej terminologii. Możesz rzucić okiem na to: http://stackoverflow.com/questions/6090932/how-to-make-a-caf-not-a-cerf-in-haskell – Rotsor