2009-06-03 10 views
5

सी # में क्लासिक स्वैप समारोह है:एफ #: क्लासिक स्वैप फ़ंक्शन कैसे लिखें?

void swap (ref int a, ref int b){ 
    int temp = a; 
    a = b; 
    b = temp; 
} 

int a = 5; 
int b = 10; 
swap(ref a, ref b); 

मैं कैसे लिख होगा कि साथ एफ #?

(ध्यान दें, मैं कार्यात्मक समकक्ष नहीं करना चाहती मैं वास्तव में संदर्भ अर्थ विज्ञान से गुजरती हैं की जरूरत है।।)

+1

आप समारोह संस्करण नहीं करना चाहते हैं, तो क्यों एफ # का उपयोग करें? – crashmstr

+1

क्या यह वाकई मायने रखता है क्यों? प्रश्न एक प्रश्न है ... अभी भी एक जवाब का हकदार है। – jrista

+2

एफ # एक द्वीप नहीं है। इस मामले में मैं एसक्यूएल संग्रहीत प्रक्रियाओं के लिए रैपर पर काम कर रहा हूं जो आउटपुट पैरामीटर पर भारी निर्भर करता है। मुझे फ़ंक्शन-स्टाइल एपीआई और एसक्यूएल-स्टाइल एपीआई के बीच बैठने की ज़रूरत है। –

उत्तर

9

जारेड के कोड के लिए निम्न

let swap (left : 'a byref) (right : 'a byref) = 
    let temp = left 
    left <- right 
    right <- temp 
8

उदाहरण का प्रयास करें:

let mutable (a, b) = (1, 2) 

let swap (left : 'a byref) (right : 'a byref) = 
    let temp = left 
    left <- right 
    right <- temp 

printfn "a: %i - b: %i" a b 
swap (&a) (&b) 
printfn "a: %i - b: %i" a b 

आम तौर पर, आप mutable let's के बजाय ref-cells का उपयोग करेंगे।

+0

क्या आप इसके बारे में निश्चित हैं। मैंने सोचा कि मैंने पढ़ा है कि जब संभव हो तो उसे म्यूटेबल पसंद करना चाहिए। –

1

/// एक समारोह है कि एक टपल में दो मानों का क्रम स्वैप

let Swap (a, b) = (b, a) 
+0

यह प्रश्न tuples में स्वैपिंग के बारे में नहीं है, लेकिन कुछ के बारे में 'tem temp = a; a <-b; b <-temp' –

संबंधित मुद्दे