Я не уверен, существует ли соединение, но перенос выражений F # в цитаты может дать вам представление о семантике языка, и в следующем вы увидите, что именованные значения действительно связаны в обратном порядке, как показано в ФГУ:
> <@ let languages = ("English", "Spanish", "Italian") in let x, y, z = languages in () @> |> string;;
val it : string =
"Let (languages,
NewTuple (Value ("English"), Value ("Spanish"), Value ("Italian")),
Let (z, TupleGet (languages, 2),
Let (y, TupleGet (languages, 1),
Let (x, TupleGet (languages, 0), Value (<null>)))))"
Обратите внимание, что это по-прежнему согласуется с ответом @ Laurent, в котором утверждается, что выражения аргумента в конструкции кортежа вычисляются слева направо. В следующем примере показано, как результат построения кортежа связывается с промежуточным именованным значением, которое затем деконструируется с использованием выражений TupleGet без побочных эффектов.
> <@ let x,y = (stdin.Read(), stdin.ReadLine()) in () @> |> string;;
val it : string =
"Let (patternInput,
NewTuple (Call (Some (Call (None, System.IO.TextReader ConsoleIn[Object](),
[])), Int32 Read(), []),
Call (Some (Call (None, System.IO.TextReader ConsoleIn[Object](),
[])), System.String ReadLine(), [])),
Let (y, TupleGet (patternInput, 1),
Let (x, TupleGet (patternInput, 0), Value (<null>))))"