2015-12-10 3 views
6

हर कोई dependently टाइप किया कार्यात्मक भाषाओं पर प्राकृतिक संख्या व्यक्त करने के लिए सुरुचिपूर्ण तरीका जानता है:आप कार्यात्मक भाषाओं पर संख्यात्मक टावर को औपचारिक कैसे बनाते हैं?

data Nat = Zero | Succ Nat 

पूर्णांक, अंश, रियल, परिसर और Quaternion, हैं भी, बहुत ही व्यावहारिक प्रोग्रामिंग आवेदन के लिए महत्वपूर्ण। एक उन्हें लागू कर सकते हैं:

data Integer = Integer (sign : Bool) (modulus : Nat) 
data Fraction = Fraction (dividend : Nat) (divisor : Nat) 
data Real  = Real (exponent : Integer) (fraction : Nat) 
data Complex = Complex Real Real 
data Quaternion = Quaternion Real Real Real Real 

लेकिन उन में से कोई भी वास्तव में के रूप में सार्थक Nats कर के रूप में अपने प्रकार की वास्तविक संरचना/प्रकृति को प्रतिबिंबित। इंटीजर वास्तविक पूर्णांक के लिए isomorphic नहीं है, उदाहरण के लिए (जैसे शून्य दो बार होता है)। रीलों को स्टोर करने के लिए दस लाख से अधिक कोशिकाओं की आवश्यकता होती है (3.1415 9 2), फिर भी स्टोर करने के लिए 100 भी नहीं (4096), जो असंतुलित दिखता है। कॉम्प्लेक्स केवल रील्स का एक गुच्छा है, जो वास्तव में एक कॉम्प्लेक्स को प्रतिबिंबित नहीं करता है। मुझे आश्चर्य है कार्यात्मक प्रोग्रामिंग भाषाओं पर संख्यात्मक टावर व्यक्त करने का प्राकृतिक, सुरुचिपूर्ण तरीका क्या है?

+0

मैंने पहले इसी तरह के प्रश्न पूछे हैं लेकिन मुझे लगता है कि कोई भी कभी भी पर्याप्त समाधान के साथ नहीं आया है। – MaiaVictor

+6

आपको ऐसा क्यों नहीं लगता कि "सटीक रूप से दर्शाता है कि 'कॉम्प्लेक्स' क्या है? (उस ने कहा, आपके 'असली' में केवल अंतिम दशमलव मान शामिल हैं, जो राशनल का सख्त सबसेट है।) मेरा मतलब है, मुझे लगता है कि आप इसे वास्तविक बहुपदों के रूप में प्रतिनिधित्व कर सकते हैं mod x^2 + 1, लेकिन यह स्पष्ट नहीं है मुझे तुम्हारी आपत्ति क्या है। –

+2

गणितीय रूप से बोलते हुए, हम जो कुछ भी चुनते हैं उसके अलावा किसी अन्य चीज़ की "मौलिक संरचना" नहीं है, और यदि हम चाहें तो हम दो अलग-अलग संरचनाएं दिखा सकते हैं और उन्हें एक दूसरे के रूप में उपयोग कर सकते हैं। पूर्णांक के आपके प्रतिनिधित्व के बारे में कुछ भी नहीं है। –

उत्तर

0

मुझे एहसास है कि यह एक पुराना सवाल है और मेरा जवाब हास्केल/इडिस की बजाय स्कैला में है, लेकिन यह देखना दिलचस्प हो सकता है कि वे Spire में इसे कैसे करते हैं। दृष्टिकोण बीजगणितीय संरचनाओं का एक पदानुक्रम स्थापित करने के लिए है (यानी, Semigroup/Group/Ring/Field/आदि।) पहले और फिर संख्यात्मक तरीकों से विभिन्न एल्गोरिदम जोड़कर, उन पर शीर्ष संख्याओं को तुरंत चालू करें। मुझे यकीन है कि वहां कुछ उपयोगी विचार मिल सकते हैं।

संबंधित मुद्दे