(코딩 문제가 아닌 개념적 역학에 관한 것이기 때문에 여기서 질문하고 있습니다)
나는 작은 규모의 피보나치 수를 사용하는 작은 프로그램을 연구하고 있었지만 특정 수를 초과하면 고통스럽게 느려졌으며 약간의 인터넷 검색이 Haskell의 기술을 우연히 발견했습니다 Memoization
. 그들은 다음과 같이 작동하는 코드를 보여주었습니다.
-- Traditional implementation of fibonacci, hangs after about 30
slow_fib :: Int -> Integer
slow_fib 0 = 0
slow_fib 1 = 1
slow_fib n = slow_fib (n-2) + slow_fib (n-1)
-- Memorized variant is near instant even after 10000
memoized_fib :: Int -> Integer
memoized_fib = (map fib [0 ..] !!)
where fib 0 = 0
fib 1 = 1
fib n = memoized_fib (n-2) + memoized_fib (n-1)
그래서 여러분들에게 내 질문은, 어떻게 또는 왜 이것이 작동합니까?
계산이 끝나기 전에 어떻게 든 대부분의 목록을 실행하기 때문입니까? 그러나 haskell이 게으 르면 실제로 따라야 할 계산이 없습니다 ... 어떻게 작동합니까?
the calculation catches up
있습니까? BTW, 메모이 제이션 하스켈 특정되지 않습니다 : en.wikipedia.org/wiki/Memoization