o
संरचना ऑपरेटर (उदाहरण के लिए val x = foo o bar
, जहां foo
और bar
दोनों कार्य हैं), केवल एकल-तर्क कार्यों और/या समान संख्याओं के साथ फ़ंक्शंस पर उपयोग करने योग्य हैं? यदि नहीं, bar(x)
के साथ, कहने, लिखने के लिए वाक्यविन्यास क्या है।क्या एसएमएल `ओ 'ऑपरेटर केवल एकल-तर्क कार्यों पर उपयोगी है?
उत्तर
जैसा कि माइकल ने पहले ही कहा था, हाँ, एसएमएल में केवल एक तर्क कार्य है। मैं थोड़ा सा विस्तार करना चाहता हूं, हालांकि।
निम्नलिखित समारोह:
fn : int * int -> int
जिसका मतलब है कि पहला तर्क दो ints की एक टपल है:
fun foo (x,y) = x + y
प्रकार है।
(sign o foo) (4,~5)
जो तुम sign (foo (4,~5))
के रूप में ही देना होगा: तो आप की तरह कुछ कर सकता है।
ठीक है, लेकिन इस तरह कुछ के बारे में क्या?
fn : int -> int -> int
जिसका मतलब है कि बार वास्तव में सिर्फ एक पूर्णांक लेता है, और एक फ़ंक्शन:
fun bar x y = x + y
यह प्रकार है। तो आप यह नहीं कर सकते:
(sign o bar) 4 ~5
क्योंकि बार एक फ़ंक्शन देता है, और साइन एक पूर्णांक लेता है। आप इस, हालांकि कर सकते हैं:
(sign o bar 4) ~5
क्योंकि bar 4
एक समारोह है कि एक नंबर करने के लिए 4 जोड़ता है।
एसएमएल में केवल एक तर्क कार्य है; foo(x,y)
एक फ़ंक्शन foo
एक एकल तर्क ले रहा है, tuple (x, y)
। इस प्रकार, कोई विशेष हैंडलिंग की आवश्यकता नहीं है और bar(x)
को foo
के साथ लिखने के लिए उचित प्रकार के एक टुपल को वापस करने की आवश्यकता होगी।
मैंने कुछ मानक एमएल कोड (विशेष रूप से पॉली/एमएल कोड इसाबेल/शुद्ध) देखा है जो अतिरिक्त संरचना ऑपरेटर को शीर्ष-स्तरीय वातावरण में रखता है जो इस तरह की स्थिति को संभालता है। उदा .:
fun (f oo g) x y = f (g x y)
fun (f ooo g) x y z = f (g x y z)
fun (f oooo g) x y z w = f (g x y z w)
आम तौर पर, ऐसी बातें किफ़ायत से इस्तेमाल किया जाना चाहिए (चार या अधिक ओ के थोड़ा पागल हो रही है), लेकिन यह कम से कम oo
चारों ओर हो रही काफी उपयोगी है।
बहुत उपयोगी। आपका बहुत बहुत धन्यवाद! – GregT
यदि आपने 'साइन ओ बार 'के साथ अपनी पिछली" समस्या "को सुविधाजनक बनाने में सहायता के लिए' अनिश्चित 'फ़ंक्शन को परिभाषित किया है, और संभवतः एक' फ्लिप 'फ़ंक्शन जो कि" दंड ऑर्डरिंग "को फ्लिप करके" तर्क, ऑर्डर "को फ़्लिप कर सकता है' '(y, x)', आदि –
जेस्पर: इस मामले में, मैं शायद $ ऑपरेटर को परिभाषित करता हूं और '$ bar xy' पर हस्ताक्षर करता हूं। – Tayacan