Problem 2
https://projecteuler.net/problem=2
Juliaで次のように書く。
function e002(N) local s = 0 local a = 1 local b = 1 while b <= N if b%2 == 0 s += b end a, b = b, a+b end return s end N = parse(Int, ARGS[1]) println(e002(N))
Pythonのタプルで代入は使える。ちなみに配列は同様にできないらしい。
generator
Fibonacci数列をgeneratorで排出できればきれいに書くことができるが、Juliaでgeneratorを使うには次のように書けばよい。
fibs() = Channel() do c local a = 1 local b = 1 while true push!(c, b) a, b = b, a+b end end function e002a(N) local s = 0 for f in fibs() if f > N break elseif f%2 == 0 s += f end end return s end N = parse(Int, ARGS[1]) println(e002a(N))
あまりきれいになっていないように思えるが、気のせいだろうか。Juliaにはどうもtakewhileがないようなのだ。takewhileなんか使ったら遅くなるに決まっているからだろうか。
generatorは、ここではcという入れ物を用意して、そこにpushすることで実現しているっぽい。