F #: Как написать классическую функцию подкачки? - PullRequest
6 голосов
/ 03 июня 2009

В 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 #?

(Обратите внимание, я не хочу функционального эквивалента. Мне на самом деле нужно передавать по ссылочной семантике.)

Ответы [ 3 ]

10 голосов
/ 03 июня 2009

Пример кода Джареда:

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 вместо изменяемого файла.

9 голосов
/ 03 июня 2009

Попробуйте следующее

let swap (left : 'a byref) (right : 'a byref) =
  let temp = left
  left <- right
  right <- temp
1 голос
/ 07 октября 2013

/// Функция, которая меняет порядок двух значений в кортеже

let Swap (a, b) = (b, a)
...