मैं संख्याओं की एक सूची देने वाले एक फ़ंक्शन को लिखने की कोशिश कर रहा हूं, एक सूची देता है जहां अंतिम तत्व से शुरू होने पर प्रत्येक 2 नंबर को मूल्य में दोगुना कर दिया जाता है। तो यदि सूची तत्व 1..n हैं, n-th को छोड़ दिया जा रहा है, (एन -1) - यह मूल्य में दोगुनी हो जायेगा, (एन -2) - यह छोड़ा जा रहा है के रूप में है,हास्केल - एक सुरुचिपूर्ण तरीके से रिवर्स ऑर्डर में सूची तत्वों को फिर से कैसे चालू करें?
तो यहाँ आदि मैं इसे कैसे हल किया है:
MyFunc :: [Integer] -> [Integer]
MyFunc xs = reverse (MyFuncHelper (reverse xs))
MyFuncHelper :: [Integer] -> [Integer]
MyFuncHelper [] = []
MyFuncHelper (x:[]) = [x]
MyFuncHelper (x:y:zs) = [x,y*2] ++ MyFuncHelper zs
और यह काम करता है:
MyFunc [1,1,1,1] = [2,1,2,1]
MyFunc [1,1,1] = [1,2,1]
हालांकि, मैं मदद नहीं कर सकता लेकिन लगता है कि वहाँ एक सरल हो गया है सूची को वापस करने, इसे संसाधित करने और फिर इसे फिर से उलट करने से समाधान। क्या मैं बस सूची को पीछे की ओर ले सकता हूं? यदि हां, तो कैसे?
आप तत्वों भरोसा कर सकते हैं और फिर या तो हर विषम क्रमांकित या हर सम-संख्यांकित तत्व दोगुना। –