आप "2 से विभाजित" की तरह के ऑपरेशन में पारित कर सकते हैं या "घटाना 1", जहाँ "1 जोड़ने" सिर्फ एक आंशिक रूप से लागू ऑपरेटर का उपयोग करने के लिए तर्क के साथ एक ऑपरेटर गुजर इस तरह दिखता है:एफ # एक समारोह
List.map ((+) 1) [1..5];; //equals [2..6]
// instead of having to write: List.map (fun x-> x+1) [1..5]
क्या हो रहा है 1 (+) पर लागू किया जा रहा है क्योंकि यह पहला तर्क है, और सूची आइटम दूसरे तर्क के रूप में लागू किया जा रहा है। अतिरिक्त और गुणा के लिए, यह तर्क आदेश कोई फर्क नहीं पड़ता।
मान लीजिए मैं हर तत्व से 1 घटाना (यह शायद एक आम शुरुआती गलती होगी) हैं:
List.map ((-) 1) [1..5];; //equals [0 .. -4], the opposite of what we wanted
1 करने के लिए लागू किया जाता है (-) ने अपना पहला तर्क के रूप में है, इसलिए बजाय (list_item - 1)
, मैं (1 - list_item)
प्राप्त करें। मैं नकारात्मक जोड़ने के बजाय सकारात्मक घटाने पर के रूप में यह पुनर्लेखन कर सकते हैं:
List.map ((+) -1) [1..5];;
List.map (fun x -> x-1) [1..5];; // this works too
मैं एक अधिक अर्थपूर्ण जिस तरह से यह लिखने के लिए, ((-) _ 1)
, जहां _
एक प्लेसहोल्डर को दर्शाता है, आर्क भाषा में की तरह की तरह कुछ के लिए देख रहा हूँ। इससे 1
-
पर दूसरा तर्क होगा, इसलिए List.map में, यह list_item - 1
का मूल्यांकन करेगा। तो अगर आप सूची में divide by 2
मैप करने के लिए चाहता था, आप लिख सकते हैं:
List.map ((/) _ 2) [2;4;6] //not real syntax, but would equal [1;2;3]
List.map (fun x -> x/2) [2;4;6] //real syntax equivalent of the above
यह किया या मैं (fun x -> x/2)
उपयोग करने के लिए है हो सकता है? ऐसा लगता है कि प्लेसहोल्डर सिंटैक्स में सबसे नज़दीक हम एक नामांकित तर्क के साथ लैम्ब्डा का उपयोग करना चाहते हैं।
आपका फ्लिप-फ़ंक्शन (बस साथ ही) को 'फ्लिप एफ एक्स वाई = एफ वाई एक्स' –
के रूप में परिभाषित किया जा सकता है यह इनलाइनिंग के लिए एक अच्छा उम्मीदवार है। –