I have trouble understanding the following two lines in the F# code for TrueSkill:

letskills = skillsPrior nPlayers

letskills, synthetic_results = prior nPlayers
matches

I copied the two functions below where these two statements are in.

Could someone explain these to me? What types are defined here?

The second statement is "let pattern=expression"? 2-tuple? 3-tuple?

Thank you very much in advance! - Min

[<ReflectedDefinition>]

let

prior (nPlayers: int) (matches: (int*int)[]) =

letskills = skillsPrior nPlayers

letresults = [|
for(p1, p2)
inArray.toList matches
->performanceDiff skills
p1 p2|]

skills, results

[<ReflectedDefinition>]

let

posterior (nPlayers: int, games: Game[]) =

letmatches = [|
for(p1, p2, _)
ingames
->(p1, p2) |]

letskills, synthetic_results = prior nPlayers
matches

for(diff, (_, _, outcome))
inArray.toList (Array.zip synthetic_results
games) do

ifoutcome = 1
then

observe (diff > drawMargin)

elseifoutcome
= -1 then

observe (diff < -drawMargin)

else

observe ((diff >= -drawMargin) && (diff <= drawMargin))

skills