यह this one पर एक अनुवर्ती प्रश्न है। मुझे लगता है कि मैंने थोड़ा सा गलत समझा है कि हास्केल में क्या करना है, इसलिए उम्मीद है कि प्रश्न का बेहतर फॉर्मूलेशन:पैरामीटर के प्रकारों के बिल्कुल दो भिन्नताओं के साथ एक सामान्य कार्य लिखें
मैं एक ऐसा कार्य करना चाहता हूं जिसे बिल्कुल दो तर्कों के साथ बुलाया जा सके। ये तर्क विभिन्न प्रकार के होंगे। उदाहरण के लिए, एक स्ट्रिंग है, और दूसरा एक पूर्णांक है। मेरे लिए,
combine "100" 500 -- results in 100500
combine 100 "500" -- results in 100500
combine 100 500 -- raises an exception
combine "100" "500" -- raises an exception
यह एक ठोस कार्यान्वयन लिखने के लिए एक समस्या नहीं है, यह एक समस्या है, तथापि, यह समारोह एक उचित हस्ताक्षर देने के लिए:
इस आवेदन पर विचार करें।
मुझे यह जानने में भी दिलचस्पी होगी कि एक ऐसा समाधान है जो अधिक सामान्य है (यानी ठोस प्रकार निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन केवल अलग-अलग प्रकार के लिए निर्धारित करता है। इसलिए, उदाहरण के लिए, आप इस सुविधा का उपयोग, अन्य कार्यों के लिए इनपुट "ठीक" करने के लिए यह तर्क permuting द्वारा निर्धारित किया जा सकता है अगर
धन्यवाद
संपादित करें:।!
नीचेमैं क्या उम्मीद कर रहा था की एक अनिश्चित प्रति है यह Erlang में करने के लिए ... अच्छा, मुझे उम्मीद है कि यह समझ में आता है, क्योंकि यह काफी समान होना चाहिए ...
combine([String], Int)->
io:fwrite("~s~w~n", [[String], Int]);
combine(Int, [String])->
combine([String], Int).
चूंकि यह प्रकार में कोई समस्या है, तो आप "एक अपवाद बढ़ा" नहीं करना चाहते, तो आप एक संकलन समय त्रुटि चाहेंगे। अंतर pedantic लग सकता है, लेकिन यह महत्वपूर्ण है। हास्केल में, यदि संभव हो तो हम हमेशा संकलन-समय त्रुटियों को चाहते हैं।साथ ही, ऐसा लगता है कि आप हास्केल के बजाय पायथन में सोच रहे हैं: पी –
मैं कहूंगा कि ऐसा करने का सही तरीका लिखना है: 'गठबंधन :: इंटीजर -> स्ट्रिंग -> स्ट्रिंग'। यह गारंटी देता है कि यह प्रत्येक प्रकार का बिल्कुल एक तर्क लेगा। यह आसान है, यह स्पष्ट है। इसमें कोई उन्नत सुविधाएं शामिल नहीं हैं। आपके द्वारा और अधिक क्या पूछा जा सकता है? – Carl
मैं व्यक्तिगत रूप से केवल दो कार्य करने की अनुशंसा करता हूं: 'combineStrInt :: स्ट्रिंग -> Int -> Int' और 'combineIntStr :: Int -> स्ट्रिंग -> Int'। मैं * केवल एक फ़ंक्शन की अनुशंसा करता हूं, और उसके बाद आवश्यक होने पर तर्कों के क्रम को उल्टा करने के लिए 'फ्लिप' का उपयोग करके, लेकिन आपके उदाहरण के लिए, पैरामीटर को फ़्लिप करने से सही परिणाम नहीं मिलेंगे। अभ्यास में, आपको शायद 'फ्लिप' उपयोगी लगेगा। बदसूरत और निराशाजनक के लिए –