मैंने अभी हास्केल सीखना शुरू कर दिया। मुझे लगता है कि मुझे मूल बातें मिल गई हैं, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि मैं वास्तव में खुद को कार्यात्मक रूप से सोचने के लिए मजबूर कर रहा हूं।गणनाओं पर कार्यों का निर्माण
data Dir = Right | Left | Front | Back | Up | Down deriving (Show, Eq, Enum)
inv Right = Left
inv Front = Back
inv Up = Down
वैसे भी, मैं क्या कर रहा हूँ के jist प्रत्येक "डिर" और इसके विपरीत/निवेश संबंधी निर्णय निर्माताओं के बीच मैप करने के लिए एक समारोह बनाने के लिए है। मुझे पता है कि मैं इसे आसानी से एक और 3 लाइनों के लिए जारी रख सकता हूं, लेकिन मैं मदद नहीं कर सकता लेकिन आश्चर्यचकित हूं कि कोई बेहतर तरीका है या नहीं। मैंने जोड़ने की कोशिश की:
inv a = b where inv b = a
लेकिन स्पष्ट रूप से आप ऐसा नहीं कर सकते हैं। तो मेरा सवाल यह है: क्या इस कार्य को बनाने के लिए शेष इनवर्ड्स या पूरी तरह से बेहतर तरीका उत्पन्न करने का कोई तरीका है?
बहुत धन्यवाद।
यही बेहतर है। प्रकारों में मूल अवधारणा (आयाम और दिशा) को सटीक रूप से कैप्चर करें। –
समझ में आता है। "साइन" पर "आविष्कार सकारात्मक" के विपरीत खोजना "Dir" पर "आक्रमण दाएं" के विपरीत खोजने से बेहतर है। तो एक 'उलटा' साफ करने का एकमात्र तरीका यह है कि आप वास्तव में छोटे बदलाव कर रहे हैं ... – rcbuchanan
@ आरसीबी 451, आप बिंदु खो रहे हैं। तथ्य यह है कि 'साइन' में कम डेटा कन्स्ट्रक्टर आकस्मिक है (हालांकि निश्चित रूप से फायदेमंद)। मुख्य अवलोकन यह है कि 'वाम' और 'दाएं' के बीच घनिष्ठ संबंध उनके प्रकारों में दिखाई दे सकते हैं, इसी प्रकार दूरदराज के संबंध (उदाहरण के लिए) 'बाएं' और 'शीर्ष' के बीच। प्रकार प्रणाली इनवेरिएंट्स में मदद करने के लिए है: अधिक प्रकार के साथ आप अधिक सटीक आविष्कार व्यक्त कर सकते हैं। – Lambdageek