पहला सवाल अंदर लंबाई से उत्पन्न होने वाले के लिए कोई उदाहरण है, इसलिए कृपया तरह मेरे साथ :)Foldable यहाँ और पूरी तरह से Haskell पर एक noob लैम्ब्डा
मैं this हास्केल के प्रश्न संख्या 6 के साथ खेल रहा था अभ्यास
और अंत में समाधान (या कुछ इसी तरह मुझे उम्मीद है कि) इस कोड को
combinations gr lis = filter clean $ sequence $ replicate gr lis
where
clean string
| total > gr = False
| otherwise = True
where total = sum [ rpt c string | c <- string]
rpt chr list = length $ filter (== chr) list
बात यह है कि मैं प्रकाश डाला जाना करने के लिए समारोह 'rpt' जो एक चरित्र में दोहराया है समय की संख्या में गिना जाता है है की तरह साथ के लिए आया था परीक्षा के लिए एक स्ट्रिंग ई: "Aaba" -> [3313] (3 पत्र एक है, जो 3 बार repeates से आता है) "aaccva" -> [332,213]
पर बाद में मैं एक लैम्ब्डा के साथ समारोह करने की कोशिश की और एक नक्शा इस में जिसके परिणामस्वरूप:
rpt chr list = map (\chr -> length $ filter (== chr)) list
और पहली GHCi पर मुझे बताया FlexibleContext उपयोग करने के लिए इस अनुमति देने के लिए, लेकिन अगर मैं तो यह पैदावार:
<interactive>:7:1:
No instance for (Foldable ((->) [Char]))
arising from a use of ‘rpt’
In the expression: rpt 'a' string
In an equation for ‘it’: it = rpt 'a' string
और यहाँ I'am अटक, मेरे पास है यह समझने में सक्षम नहीं है कि क्या हो रहा है ... इस फ़ंक्शन को ठीक करने के लिए क्या आवश्यक है?
rpt chr list = map (\chr -> length $ filter (== chr) list) list
अभी शुरुआत के रूप में, मैं FlexibleContexts
की GHCi के सुझाव की अनदेखी होगा:
यह शुरुआती व्यक्ति के लिए बहुत अच्छा संरचनात्मक रूप से है जो आप कहते हैं, आपके पास इस – luqui
के लिए एक नाटक है, जब आप एक भ्रमित त्रुटि संदेश प्राप्त करते हैं, तो टाइप एनोटेशन जोड़ना शुरू करें जो आपको लगता है कि प्रकार क्या होना चाहिए । यह * महत्वपूर्ण * त्रुटि संदेशों में सुधार होगा। वास्तव में, जितनी जल्दी हो सके गलतियों को पकड़ने के लिए सभी शीर्ष-स्तरीय कार्यों के लिए टाइप एनोटेशन प्रदान करना आम तौर पर अच्छा अभ्यास है। –
यह एक शुरुआत के लिए अच्छा है। कुछ नोट्स: 1) 'क्लीन स्ट्रिंग = कुल <= gr जहां ...' पर विचार करें, क्योंकि गार्ड का उपयोग करने के बाद या फिर-सही और झूठी दिखने के लिए और अधिक जटिल होने की आवश्यकता है 2) संयोजन के लिए आपका एल्गोरिदम दिखता है सही लेकिन उप-शीर्ष: आप कई उम्मीदवार उत्पन्न करते हैं, और आपको बाद में उन्हें फ़िल्टर करने की आवश्यकता होती है। इस पर विचार करें: आप 'x' x को छोड़कर 'x: xs' से के तत्वों को चुन सकते हैं (और सभी के तत्वों को 'xs' से ले जा रहे हैं) या' x' चुनना (और फिर 'xs' से केवल के -1 तत्वों को लेना) । – chi