Source

euler / julia / 2.jl

# 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, ...

# Find the sum of all the even-valued terms in the sequence which do not exceed
# four million.
#
# Answer: 4613732

function fibs()
    function inner()
        a, b = 1, 2
        while true
            produce(a)
            a, b = b, a + b
        end
    end
    return @task inner()
end

function takewhile(pred, iter)
    function inner()
        for val = iter
            if !pred(val)
                break
            end
            produce(val)
        end
    end

    return @task inner()
end

println(sum(filter(iseven, collect(takewhile(n -> n < 4000000, fibs())))))