Haskell - Illegal literal in type error in a function definition -
मेरे पास निम्न फ़ंक्शन हैं:
बदलें :: a - & gt; इंट - & gt; [ए] - & gt; [ए] एम्स की जगह 0 x: xs = elem: xs को elem ix बदलता है: xs = x ++ elem (i-1) xs
और जीएचसीआई मुझे बताता है कि मुझे एक अवैध शाब्दिक प्रकार की त्रुटि, विशेष रूप से पहली परिभाषा में शाब्दिक 0 पर। अब, मुझे पता है कि यदि मैं एक सूची में मनमाना वस्तु को बदलने की कोशिश कर रहा हूं, तो मुझे सूची डेटा संरचना का उपयोग नहीं करना चाहिए। यह ठीक है, क्योंकि जैसे ही मैं अपने कार्यक्रम को रिफैक्टर करने की योजना बना रहा हूं, जैसे ही मैं काम करना चाहता हूं।
जहां तक कंपाइलर शिकायत है, मुझे वाकई यकीन नहीं है कि हास्केल का मानना है कि मैं क्यों हूं यहाँ एक प्रकार को परिभाषित करने की कोशिश कर रहा है इसके साथ कोई भी मदद की बहुत सराहना की जाएगी।
जैसा कि यूज़र 2407038 ने बताया कि आपके कोड में दो सीधा समस्याएं हैं - आप पैरों को बदल रहे हैं और आप (++)
के बजाय (:)
का उपयोग कर सकते हैं - आप इसे इस तरह से हल कर सकते हैं:
replace: : ए - & gt; इंट - & gt; [ए] - & gt; [ए] एएम 0 (एक्स: एक्सएस) = एएमएम को बदलने की जगह: xs को एएम i (x: xs) = x की जगह ले जाती है: एलम (i-1) xs
को बदलें, लेकिन ऐसा करने से अभी भी आप केवल एक आंशिक परिभाषा के साथ छोड़ दें क्योंकि आप a
s (और जीएचसी की एक चेतावनी के साथ आपको बताएगी) की खाली सूचियों से मेल नहीं खाती हैं - इसे सुलझाने के लिए केवल लापता होने वाले मामले जोड़ें:
बदलें :: a - & gt; इंट - & gt; [ए] - & gt; [ए] की जगह _ _ [] = [] एएम 0 (x: xs) = elem को प्रतिस्थापित करें: xs को elem i (x: xs) = x की जगह दें: elem (i-1) xs
अंत में आप कुछ अप्रयुक्त बाइंडिंग (वेरिएबल्स) को हटा सकते हैं और elem
का नाम बदल सकते हैं (पहले से ही प्रस्तावना में निश्चित है) जीएचसी को और भी खुश करने के लिए (-Wall):
< कोड> बदलें :: ए - & gt; इंट - & gt; [ए] - & gt; [ए] की जगह _ _ [] = [] एल 0 (_: xs) = एल: एक्स की जगह एल आई (x: xs) = x: प्रतिस्थापन एल (i-1) xsप्रतिस्थापित करें
Comments
Post a Comment