2009-06-03 4 views
5

En C# la fonction d'échange classique est:F #: Comment écrire la fonction d'échange classique?

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

Comment pourrais-je écrire que avec F #?

(Note, je ne veux pas l'équivalent fonctionnel j'ai réellement besoin passer par la sémantique de référence..)

+1

Si vous ne voulez pas la version de fonction, alors pourquoi utiliser F #? – crashmstr

+1

Est-ce vraiment important pourquoi? La question est une question ... mérite toujours une réponse. – jrista

+2

F # n'est pas une île. Dans ce cas, je travaille sur des wrappers pour les procédures stockées SQL qui dépendent fortement des paramètres de sortie. J'ai besoin de cela pour s'asseoir entre l'API de style de fonction et l'API de style sql. –

Répondre

9

Effectuez les opérations suivantes

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

Exemple au code de 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 

Normalement, vous utiliseriez ref-cells au lieu de mutable.

+0

Etes-vous sûr de cela. J'ai cru lire que l'on devrait préférer les mutables quand c'est possible. –

1

/// Une fonction qui échange l'ordre de deux valeurs dans un tuple

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

Cette question ne concerne pas l'échange de tuples, mais quelque chose comme 'let temp = a; a <-b; b <-temp' –

Questions connexes