2009-06-03 35 views
5

在C#中的經典交換功能:F#:如何編寫經典的交換功能?

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); 

我將如何編寫與F#?

(注意,我不想在功能上等同我確實需要通過參考語義傳遞。)

+1

如果你不想要的功能版本,那麼爲什麼要使用F#的函數嗎? – crashmstr 2009-06-03 18:30:56

+1

這真的很重要,爲什麼?問題是一個問題...仍值得回答。 – jrista 2009-06-03 18:34:42

+2

F#不是島嶼。在這種情況下,我正在研究嚴重依賴輸出參數的SQL存儲過程的包裝。我需要將它放在函數式API和sql式API之間。 – 2009-06-03 18:38:58

回答

9

請嘗試以下

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

實例來Jared的代碼:

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 

通常,你會使用ref-cells而不是可變的讓我們。

+0

你確定。我想我已經讀過了,如果可能的話,你應該更喜歡mutable。 – 2009-06-03 19:48:27

1

///的是,CDS元組中的兩個值的順序

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

這個問題不是關於在元組中交換,而是關於'let temp = a; a <-b; b <-temp' – 2013-10-07 09:16:33