मैं Haskell realization of memoization समझने की कोशिश कर रहा हूँ, लेकिन मैं नहीं मिलता है यह कैसे काम करता साथ Memoization: क्यों 'map'-समारोह तीन पैरामीटर प्राप्त सभी मैं भी समझ में नहीं आता कीप्रत्यावर्तन
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)
पहले (समारोह - फिब, सूची [0 ..], और ||), लेकिन दो नहीं, इसे कैसे करना चाहिए।
अपडेट किया गया:
मैं कोड को फिर से लिखने की कोशिश की है, लेकिन अलग अलग परिणाम प्राप्त:
f' :: (Int -> Int) -> Int -> Int
f' mf 0 = 0
f' mf 1 = 1
f' mf n = mf(n - 2) + mf(n - 1)
f'_list :: [Int]
f'_list = map (f' faster_f') [0..]
faster_f' :: Int -> Int
faster_f' n = f'_list !! n
क्यों? क्या मेरे तर्क में कोई त्रुटि है?
वे वहाँ कुछ अतिरिक्त कोष्ठक डाल यह थोड़ा और अधिक स्पष्ट 'बनाने के लिए कर सकती थीं (मानचित्र फिब [0 ..] !!) '==' ((नक्शा फिब [0 ..]) !!) ' – soulcheck
आपके अपडेट में अलग-अलग परिणाम 'Int' ओवरफ़्लो के कारण है। इसके बजाए 'इंटीजर' का प्रयोग करें; इसके अलावा यह पहली नज़र में मेरे लिए सही लगता है। – yatima2975