2009-06-03 13 views
5

W języku C# klasyczna funkcja wymiany jest:F #: Jak napisać klasyczną funkcję zamiany?

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

Jak chciałbym napisać, że z F #?

(Uwaga, nie chcę odpowiednik funkcjonalny I rzeczywiście trzeba przejść przez semantyki referencyjnych.).

+1

Jeśli nie chcesz wersję funkcji, to po co używać F #? – crashmstr

+1

Czy to naprawdę ważne, dlaczego? Pytanie jest pytaniem ... wciąż zasługuje na odpowiedź. – jrista

+2

F # nie jest wyspą. W tym przypadku pracuję nad owijkami dla procedur składowanych SQL, które w dużym stopniu opierają się na parametrach wyjściowych. Potrzebuję tego, aby znaleźć się pomiędzy interfejsem API w stylu funkcji i interfejsem API w stylu sql. –

Odpowiedz

9

Spróbuj następującą

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

przykład kodu Jareda:

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 

Zwykle używałbyś ref-cells zamiast zmiennej let's.

+0

Jesteś tego pewien. Myślałem, że czytam, że jeśli to możliwe, wolimy mutables. –

1

/// Funkcja, która zamienia kolejność dwóch wartości w krotce

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

To pytanie nie dotyczy zamiany w krotkach, ale o czymś takim, jak 'let temp = a, a <-b; b <-temp' –

Powiązane problemy