मेरे पास निम्न हैकेल कोड है:
एफक एन = उत्पाद [1..n ] Taylor3s w0 ff 'f' 'th = w1: taylor3s w1 ff' f '' (t + h) h जहां hp i = h ^ i / fac i w1 = w0 + (hp 1) * ft w0 + (hp 2 ) * F 't w0 + (hp 3) * f' 't w0 taylor_results = 4 $ taylor3s 1 ff' f '' 1 0.25 जहां ftx = t ^ 4 - 4 * x / tf 'tx = 4 * t ^ 3 - 4 * (एफटीएक्स) / टी + 4 * एक्स / टी ^ 2 एफ '' टीएक्स = 12 * टी ^ 2 - 4 * (एफ 'टीएक्स) / टी +8 * (एफटीएक्स) / टी ^ 2 - 8 * एक्स / टी ^ 3
टेयलर_रेट्स को टेलर 3 के उपयोग के मामले में माना जाता है। हालांकि, संख्या प्रकार इनफ्रेंसिंग में कुछ गड़बड़ है जब मैं संकलन करने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है:
practice.hs: 93: 26: बाधाओं में संदिग्ध प्रकार चर `ए ':' इंटीग्रल ए 'का उपयोग करने से उत्पन्न Practice.hs: 93: 26-51 पर `taylor3s '` व्यवहारिक ए' के इस्तेमाल से 'एफ' के उपयोग से प्रैक्टिस एचसी में। 93: 37 संभावित कारण: मोनोमोर्फिज़्म प्रतिबंध निम्न पर लागू होता है: टेलर_रेट्स :: [ए] (प्रैक्टिस में बाध्य हैं। एचएस: 93: 0) संभावित सुधार: इन परिभाषाओं को एक स्पष्ट प्रकार के हस्ताक्षर या उपयोग करें -XNoMonomorphismRestriction
क्या कोई मुझे समझने में मदद करता है कि समस्या क्या है?
चूंकि आप आपरेशनों का मिश्रण कर रहे हैं, जो कि केवल उन्मुख और आपरेशनों पर उपलब्ध हैं जो केवल फ्रेटलल पर उपलब्ध हैं ( विशेष रूप से आप ^
का उपयोग करते हैं, जिनमें से दूसरा ऑपरैंट अभिन्न होना चाहिए - यदि आप दोनों ऑपरेंडों के लिए समान फ़्लोटिंग प्रकार का इरादा रखते हैं तो - **
का उपयोग करें), हैकेल का अनुमान है कि सभी एआर ग्रंथों और टायलोर 3 के
के नतीजे वाले अंशिक ए, इंटीग्रल ए = & gt; एक
। यह एक प्रकार की त्रुटि नहीं है, क्योंकि सैद्धांतिक रूप से इस तरह का अस्तित्व मौजूद हो सकता है, लेकिन यह संभवत: आपके लिए क्या नहीं है क्योंकि इस तरह के अभ्यास में मौजूद नहीं है।
इसका कारण यह है कि आपको एक प्रकार की त्रुटि मिलती है कि inferred type taylor_results
इसके फलस्वरूप भी अंशांक एक, इंटीग्रल ए = & gt; एक
जो पॉलिमोरिक है और इस प्रकार का उल्लंघन करता है।
यदि आप स्पष्ट रूप से टेलेरो_रेट्स
के रूप में taylor_results :: आंशिक ए, इंटीग्रल ए = & gt; घोषित करेंगे। एक
या मोनोमोर्फिज़्म प्रतिबंध को अक्षम करने के लिए, पूरी चीज संकलित होगी, लेकिन इसका उपयोग करना असंभव होगा (वास्तव में किसी प्रकार की परिभाषा के बिना जो इंटैग्राल और आंशिक रूप से इन्स्ता है, जो बकवास होगा)।
ध्यान दें कि यदि आप इसे ठीक कर देते हैं (उदाहरण के लिए ^
को **
के साथ) taylor_results
के प्रकार अभी भी बहुरूप (यह अनुमान लगाया जाएगा) के रूप में taylor_results :: (फ़्लोटिंग ए, एन्यूम ए) = & gt; [ए] , जो वास्तव में समझदार है), ताकि आप अभी भी मोनोमोर्फिज़्म प्रतिबंध में चले जाएंगे। इसलिए आपको फिर भी प्रतिबंध को बंद करने की आवश्यकता है, स्पष्ट रूप से
टेलर_रेट्स
के प्रकार को बहुरूपक बनाने के लिए या स्पष्ट रूप से taylor_results
के प्रकार को घोषित करने की आवश्यकता है जो एक विशिष्ट प्रकार के होने के लिए जो फ़्लोटिंग को तत्काल और एन्यूम (जैसे डबल) ध्यान दें कि जब तक आप बाद में नहीं करते हैं, हर बार जब आप इसका उपयोग करते हैं, तब टेलेरो_रेट्स
पुन: परिकलन किया जाएगा (यही कारण है कि मोनोमोर्फिज़्म प्रतिबंध मौजूद है)। स्ट्राइक>
ध्यान दें कि यदि आप यह (उदाहरण के लिए ^
को **
के साथ) सबसे सामान्य प्रकार का taylor_results
होगा (फ़्लोटिंग ए, एन्यूम ए) = & gt; [ए]
, हालांकि आप जो प्रकार प्राप्त करते हैं (जब तक कि आप मोनोमोर्फिज़्म प्रतिबंध को अक्षम नहीं करते हैं) [डबल]
होगा यदि आप डबल्स नहीं चाहते हैं, तो आपको स्पष्ट रूप से किसी अन्य प्रकार के (जो फ़्लोटिंग और ऐनम का तत्त्व होता है) या बहुरूपक होने के लिए टेलेरो_रेट्स को स्पष्ट रूप से घोषित करना होगा ध्यान दें कि यदि आप इसे बहुरूपक घोषित करते हैं, तो जब भी आप इसका उपयोग करते हैं तब से टेलर_रेट्स
का पुन: मूल्यांकन किया जाएगा (यही कारण है कि मोनोमोर्फिज़्म प्रतिबंध मौजूद है)।
Comments
Post a Comment