ब्रायन उल्लेख किया है, वहाँ है त्रुटि मिलती है कुछ में निर्मित सामान्य arithmethic के लिए समर्थन और आप 'स्थिर की कमी' है कि आपकी कुछ सामान्य निर्धारित करने की अनुमति का उपयोग कर सकते स्वयं कार्य करता है (हालांकि यह थोड़ा सीमित है)।
इसके अलावा, आप गतिशील 'न्यूमेरिक एसोसिएशन' का भी उपयोग कर सकते हैं, जो किसी फ़ंक्शन में उपयोग करते समय थोड़ा धीमा होता है, लेकिन इसका उपयोग आपके स्वयं के वेक्टर या मैट्रिक्स प्रकार को परिभाषित करने के लिए उदाहरण के लिए किया जा सकता है। यहां एक उदाहरण दिया गया है:
#r "FSharp.PowerPack.dll"
open Microsoft.FSharp.Math
let twoTimesLarger (n:'a) (m:'a) =
let ops = GlobalAssociations.GetNumericAssociation<'a>()
let sel = if ops.Compare(n, m) > 0 then n else m
ops.Multiply(sel, ops.Add(ops.One, ops.One))
हमें पहले एफ # पावरपैक लाइब्रेरी का संदर्भ देने की आवश्यकता है जिसमें कार्यक्षमता शामिल है। फिर हम एक सामान्य कार्य को हस्ताक्षर 'a -> 'a -> 'a
के साथ परिभाषित करते हैं। पहली पंक्ति गतिशील रूप से 'a
के साथ काम करने के लिए संख्यात्मक संचालन पाती है (यह अनिवार्य रूप से कुंजी के रूप में टाइप के साथ कुछ लुकअप तालिका का उपयोग करती है)। फिर आप गुणात्मक, अतिरिक्त (Multiply
, Add
) और कई अन्य चीज़ों को करने के लिए संख्यात्मक संचालन ऑब्जेक्ट के तरीकों का उपयोग कर सकते हैं। समारोह किसी भी संख्या के साथ काम करता है:
twoTimesLarger 3 4
twoTimesLarger 2.3 2.4
twoTimesLarger "a" "b" // Throws an exception!
जब आप अपने खुद के संख्यात्मक प्रकार को परिभाषित है, तो आप अपने सांख्यिक संचालन को परिभाषित करने और उन्हें रजिस्टर GlobalAssociations.RegisterNumericAssociation
का उपयोग कर सकते हैं। मेरा मानना है कि इसका मतलब यह भी है कि आप परिचालन पंजीकृत करने के बाद अंतर्निहित F # Matrix<YourType>
और Vector<YourType>
का उपयोग करने में सक्षम होंगे।
स्रोत
2010-02-09 02:19:34
मैंने सोचा कि आपको एफ # में स्थिर बाधाओं का उपयोग करते समय ''ए' के बजाय'^a' का उपयोग करने की आवश्यकता है, लेकिन मैं गलत हो सकता हूं ... –
इस मामले में दोनों काम करते हैं। – gradbot
इस विशेष मामले में, आपको जेनेरिक पैरामीटर या बाधाओं को निर्दिष्ट करने की भी आवश्यकता नहीं है क्योंकि उन्हें अनुमान लगाया जा सकता है: 'इनलाइन को बी = ए + बी' – kvb