2009-06-03 9 views
5

です:F#:古典的なスワップ関数を書くには? C#では、古典的なスワップ機能は

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

タプルに2つの値の順序を入れ替える機能? – crashmstr

+1

それは本当に問題なのですか?質問は質問です...答えはまだまだあります。 – jrista

+2

F#は島ではありません。この場合は、出力パラメータに大きく依存するSQLストアドプロシージャのラッパーに取り組んでいます。私はこれを関数型APIとSQL型APIの間に置く必要があります。 –

答えて

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 

通常、変更可能なletの代わりにref-cellsを使用します。

+0

それは本当ですか?可能であれば、ミューテックスを好むべきだと私は思った。 –

1

///あなたが機能バージョンをしたくない場合は、なぜF#の使用を

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

この質問はタプルの入れ替えについてではなく、 'let temp = a; a <-b; b <-temp' –

関連する問題