tags:

views:

779

answers:

3

In F# code I have a tuple:

let myWife=("Tijana",32)

I want to access each member of the touple separately. For instance this what I want to achieve by I can't

Console.WriteLine("My wife is {0} and her age is {1}",myWife[0],myWife[1])

This code doesn't obviously work, by I think you can gather what I want to achieve.

+9  A: 

You want to prevent your wife from aging by making her age immutable? :)

For a tuple that contains only two members, you can fst and snd to extract the members of the pair. For longer tuples, you'll have to unpack the tuple into other variables. For instance,

let _, age = myWife;;
let name, age = myWife;;
Curt Hagenlocher
+1 got a chuckle out of me
Mo Flanagan
+7  A: 

Another quite useful thing is that pattern matching (just like when extracting elements using "let" binding) can be used in other situations, for example when writing a function:

let writePerson1 person =
  let name, age = person
  printfn "name = %s, age = %d" name age

// instead of deconstructing the tuple using 'let', 
// we can do it in the declaration of parameters
let writePerson2 (name, age) = 
  printfn "name = %s, age = %d" name age

// in both cases, the call is the same
writePerson1 ("Joe", 20)
writePerson2 ("Joe", 20)
Tomas Petricek
Tom, I'm reading your book right now ;)
Mo Flanagan
A: 

You can use the function fst to get the first element, and snd to get the second ekement. You can also write your own 'third' function:

let third (_, _, c) = c

Read more here: F# Language reference, Tuples

Johan Franzen