की आवश्यकता है जब तक कि मैं अंतिम कार्य पर स्टम्प्ड नहीं करता तब तक मेरा होमवर्क वास्तव में अच्छा चला गया।
पहले, मैं एक कस्टम List
संरचना को परिभाषित करने के लिए किया था:कस्टम 'फोल्ड' फ़ंक्शन को काउंटर
foldList :: (a -> b -> b) -> b -> List a -> b
foldList f b Nil = b
foldList f b (Cons a l) = f a (foldList f b l)
दूसरा पैरामीटर मान कि अंत में इस्तेमाल किया जाता है:
data List a = Nil | Cons a (List a) deriving Show
एक अन्य कार्य के लिए एक कस्टम fold
समारोह लिखने के लिए था सूची में (Nil
तत्व पर)।
prodList :: List Int -> Int
prodList = foldList (\x y -> x * y) 1
1
अंत में multplication की तटस्थ तत्व है:
मैं भी एक समारोह prodList
कि एक दूसरे के साथ प्रदान की गई सूची के प्रत्येक तत्व गुणा लिखना पड़ा। इसलिए गणना पर इसका कोई असर नहीं पड़ता है।
पिछले एक है, हालांकि, मुझे हल करने के लिए के लिए मुश्किल है।
मुझे एक फ़ंक्शन binList
लिखना है जो एक बाइनरी संख्या का प्रतिनिधित्व करने वाली सूची के दशमलव मान की गणना करता है। कम से कम महत्वपूर्ण बिट सूची का पहला तत्व है, इसलिए बाइनरी संख्या को उलट दिया जाता है।
एक दिया गया उदाहरण यह है कि binList (Cons 1 (Cons 0 (Cons 0 (Cons 0 (Cons 1 Nil)))))
का परिणाम 1 9 होना चाहिए (क्योंकि (10001) _2 है (1 9) _10)। सूची का परिणाम [1,1,0,1], हालांकि, (1011) _2 = (11) _10 होना चाहिए)।
असाइनमेंट की दोषी है कि हम foldList
उपयोग करने के लिए है, है।
मैं कैसे प्रत्येक अंक की गणना करने के पता है, लेकिन मैं पता लगाने के लिए जो सूचकांक i
मैं वर्तमान में कर रहा हूँ एक रास्ता खोजने के लिए संघर्ष:
binList :: List Int -> Int
binList = foldList (\x y -> 2^i*x + y)
संभवतः में इस समस्या के समाधान के लिए एक अच्छा, करी तरीका है हास्केल। क्या आप मुझे समझा सकते हैं कि आप इस असाइनमेंट को कैसे हल करेंगे?
आप को पता है कि सूचकांक आप पर हैं की जरूरत नहीं है। (संकेत: यदि आपके पास 10 अंक हैं, तो सबसे महत्वपूर्ण जरूरतों को 2, 9 गुणा से गुणा किया जाना चाहिए ... सूची में इसके दाईं ओर अंकों की संख्या .. हम्म ....) – alternative
फ़ंक्शन लागू किया गया है प्रति तत्व आधार पर। प्रत्येक सूची के तत्वों के लिए एक्सपोनेंट 'i' बदलता है। मुझे पता नहीं है कि एक्सपोनेंट को निर्धारित करने के लिए इंडेक्स को जानने के बिना ऐसा करना संभव है। – J0hj0h
ओ.ओ यह इतना आसान है! संकेत के लिए धन्यवाद! पूरी तरह से इसे करने का तरीका भूल गया! : डी – J0hj0h