कल्पना कीजिए कि आपको अनुक्रम पर गुना करने की आवश्यकता है, और सीमा के साथ कई बिंदुओं पर मध्यवर्ती मूल्यों को भी जानना चाहते हैं।तह और पुनरावृत्ति के इस पैटर्न क्या है?
[a,b,c] = map fst . tail $ chain [g i, g j, g k] (zero, sequence)
g :: Integer -> (a,b) -> (a,b)
chain (f:fs) x = x : chain fs (f x)
chain [] x = [x]
समारोह g
, (लंबाई i
, j
की, आदि) एक इनपुट अनुक्रम के एक निर्धारित हिस्से की खपत कुछ प्रारंभिक मूल्य के साथ शुरू और एक ही के परिणामों का निर्माण: यह क्या मैं इस के लिए उपयोग किया है है अगले आमंत्रण में खिलाया जाने के लिए टाइप करें। प्रारंभ से शुरू होने वाली अलग-अलग लंबाई के लिए अनुक्रम को कई बार उपभोग करना और प्रारंभिक मूल्य निश्चित रूप से अक्षम और समय-समय पर अक्षम होगा।
तो एक तरफ हम पूर्णांक के इस अनुक्रम पर गुना - अनुक्रम पर अंतरिम बिंदु; दूसरी तरफ हम इस समारोह को फिर से सक्रिय करते हैं, g
। यह क्या है? क्या मैं यहाँ कुछ बुनियादी याद कर रहा हूँ? क्या इसे किसी भी तरह फोल्ड इत्यादि के नियमित प्रदर्शन के साथ व्यक्त किया जा सकता है?
संपादित करें: हल: ऊपर बस
[a,b,c] = map fst . tail $ scanl (flip g) (zero, sequence) [i, j, k]
दिलचस्प है कि कैसे एक परिवर्तनीय यात्रा वास्तव में है संशोधक की सूची पर तह है।
क्या आप मूल रूप से स्कैनल का मतलब रखते हैं? http://www.haskell.org/hoogle/?hoogle=scanl – Marcin
@ मार्सिन आह, हाँ, मूलभूत सामग्री। शायद हाँ। मुझे क्या उलझन में था कि 'जी' स्वयं अनुक्रम पर भी गुजरता है। मुझे लगता है कि स्कैनिंग फ़ंक्शन 'i' के साथ '(शून्य, अनुक्रम) 'को जोड़ देगा और सीधे' [i, j, k] 'सूची को स्कैन करेगा ... धन्यवाद, कोशिश करूँगा! –