हम एक समारोह है कि 1 से एक सीमा के प्रत्येक तत्व बढ़ जाती मैप करना चाहते हैं, तो हमCurrying घटाव
map (\x -> x + 1) [1..5]
लिख सकता है लेकिन मुझे लगता है कि ज्यादातर लोगों को बस के लिए
map (+1) [1..5]
बजाय
जाना होगा। लेकिन यह स्पष्ट रूप से (-1) के साथ काम नहीं करता है क्योंकि यह नकारात्मक है।
तो पहली बात यह है कि मन के लिए आया था
map (+(-1)) [1..5]
था जो भावना पर विचार कैसे घटाव प्रस्तावना (x - y = x + negate y
) में परिभाषित किया गया है होगा, लेकिन मेरे लिए थोड़ा अजीब लग रहा है। मैं तब
map (flip (-) 1) [1..5]
यह किसी भी तरह से मेरे लिए बेहतर दिखता है, लेकिन शायद थोड़ा जटिल है।
अब मुझे यह कोई बड़ा सौदा नहीं है, लेकिन मुझे आश्चर्य है कि क्या मुझे यह लिखने का एक और स्पष्ट तरीका याद आ रहा है? यदि नहीं, तो आप किस 2 तरीके से पसंद करेंगे? मैं वास्तव में सिर्फ पूछ रहा हूं क्योंकि अक्सर इस तरह के छोटे विवरण हैं जो आपके कोड को अधिक मूर्खतापूर्ण बनाते हैं और इसलिए अन्य डेवलपर्स के लिए सुखद होते हैं जिन्हें इसे पढ़ना होता है।
समाधान
अब मुझे मिल गया है कि उत्तर के एक जोड़े, मुझे लगता है कि मेरी निजी पसंदीदा
map (subtract 1) [1..5]
द्वारा
map pred [1..5]
पीछा किया है ज्यादातर क्योंकि पहले एक वास्तव में स्पष्ट है और किसी को भी अनुमान लगाने की आवश्यकता नहीं है/pred
का अर्थ है (पूर्ववर्ती)।
लिख सकते हैं एक छोटा सा ध्यान दें: समस्या currying नहीं है, यह ऑपरेटर अनुभाग वाक्य रचना है।'(-) 1' आंशिक रूप से curried' -' फ़ंक्शन को आंशिक रूप से लागू करने के लिए एक (वाक्य रचनात्मक रूप से वैध) तरीका है। –
मैं इसके लिए एक शीर्षक के साथ संघर्ष कर रहा था और कुछ भी बेहतर नहीं हो सका। इसके अलावा 'नक्शा ((-) 1) [1..5]' काम नहीं करता है, इसलिए फ्लिप के साथ संस्करण। –
यदि वे इंटीग्रल हैं, और आप केवल 1 घटा देना चाहते हैं, तो क्यों न करें 'नक्शा पूर्व' –