11

これは私がこれまでに持っているものです。

let Swap (left : int , right : int ) = (right, left)

let mutable x = 5
let mutable y = 10

let (newX, newY) = Swap(x, y) //<--this works

//none of these seem to work
//x, y <- Swap(x, y)
//(x, y) <- Swap(x, y)
//(x, y) <- Swap(x, y)
//do (x, y) = Swap(x, y)
//let (x, y) = Swap(x, y)
//do (x, y) <- Swap(x, y)
//let (x, y) <- Swap(x, y)
4

3 に答える 3

12

できません; 単一の割り当てで「複数の可変変数」を更新する構文はありません。もちろんできます

let newX, newY = Swap(x,y)
x <- newX
y <- newY
于 2009-06-03T20:36:36.540 に答える
4

コメントしたコードは機能しません。「x、y」と書くと、不変の値である新しいタプルが作成されるため、更新できません。必要に応じて、可変タプルを作成し、スワップ関数の結果で上書きすることができます。

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

私のアドバイスは、F#の不変の側面を調査し、不変の構造を使用して、以前は可変の値を使用して行っていたものを実現する方法を調べることです。

ロブ

于 2009-06-03T20:41:41.430 に答える
4

F# には C# と同じように "参照渡し" のパラメーターがあるため、従来のスワップ関数を同様に記述できます。

let swap (x: byref<'a>) (y: byref<'a>) =
    let temp = x
    x <- y
    y <- temp

let mutable x,y = 1,2
swap &x &y
于 2011-04-04T04:19:16.580 に答える