# Project Euler Problem #2 with F#

Here's problem #2 with F#. The question is the following:

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Below is the python solution:

```
def Fibonacci():
total = 0
lastValue = 1
value = 1
while value < 4000000:
if value % 2 == 0:
total += value
tmpValue = value
value = value + lastValue
lastValue = tmpValue
return total
print Fibonacci()
```

It's a pretty straightforward solution. The code iterates through from 1 to 4 million and determines if the number is even and keeps track of the total.

Below is the F# solution:

```
let upperBound = 4000000
let fibSeq = Seq.unfold(fun (a,b) -> if a <= upperBound then Some (a, (b, a+b)) else None) (0, 1)
let total =
fibSeq
|> Seq.filter(fun n -> n % 2 = 0)
|> Seq.sum
sprintf "%i" total
```

There are a few functions I'm using here, the unfold, takewhile, filter, and sum. Below are the signatures for all the functions:

`Seq.unfold : ('State -> ('T * 'State) option) -> 'State -> seq<'T>`

`Seq.filter : ('T -> bool) -> seq<'T> -> seq<'T>`

`Seq.sum : seq<^T> -> ^T (requires ^T with static member (+) and ^T with static member Zero)`

The unfold function creates the Fibonacci sequence while the (a <= upperBound) is true. Filter will remove any numbers that are not divisible by 2 and sum will add all the remaining numbers in the sequence.

Again, I prefer the F# solution since it's a bit cleaner and more legible.