(ध्यान दें कि मैं प्रश्न यहाँ डाल रहा हूँ क्योंकि यह वैचारिक यांत्रिकी के बारे में है, बजाय एक कोडिंग समस्या के)
मैं एक छोटे से कार्यक्रम पर काम कर रहा था, जो अपने समीकरण में फाइटवर्क नंबरों के अनुक्रम का उपयोग कर रहा था, लेकिन मैंने देखा कि अगर मुझे एक निश्चित संख्या में मिला है तो यह काफी धीमा हो गया है, एक बिट के चारों ओर घूमना, जिसे मैं हास्केल में एक तकनीक के रूप में जाना जाता है 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)
तो आप लोगों से मेरा सवाल यह है कि यह काम कैसे या नहीं होता है?
क्या यह इसलिए है क्योंकि यह किसी भी तरह से गणना पकड़ने से पहले अधिकांश सूची से गुजरने का प्रबंधन करता है? लेकिन अगर हेकेल आलसी है, तो वास्तव में कोई गणना नहीं है जिसे पकड़ने की जरूरत है ... तो यह कैसे काम करता है?
the calculation catches up
? BTW, संस्मरण haskell के लिए विशिष्ट नहीं है: en.wikipedia.org/wiki/Memoization