在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#?
(注意,我不想在功能上等同我確實需要通過參考語義傳遞。)
在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#?
(注意,我不想在功能上等同我確實需要通過參考語義傳遞。)
請嘗試以下
let swap (left : 'a byref) (right : 'a byref) =
let temp = left
left <- right
right <- temp
實例來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
而不是可變的讓我們。
你確定。我想我已經讀過了,如果可能的話,你應該更喜歡mutable。 – 2009-06-03 19:48:27
///的是,CDS元組中的兩個值的順序
let Swap (a, b) = (b, a)
這個問題不是關於在元組中交換,而是關於'let temp = a; a <-b; b <-temp' – 2013-10-07 09:16:33
如果你不想要的功能版本,那麼爲什麼要使用F#的函數嗎? – crashmstr 2009-06-03 18:30:56
這真的很重要,爲什麼?問題是一個問題...仍值得回答。 – jrista 2009-06-03 18:34:42
F#不是島嶼。在這種情況下,我正在研究嚴重依賴輸出參數的SQL存儲過程的包裝。我需要將它放在函數式API和sql式API之間。 – 2009-06-03 18:38:58