\$\begingroup\$
\$\endgroup\$
3
I have already done many of the Project Euler questions in other languages before, but whenever learning a new language, I like to do the problems again in that language.
Here is my elixir version of
Find the sum of all Fibonacci numbers below 4,000,000.
stream = Stream.unfold({0,1}, fn {a, b} -> {a, {b, a + b}} end)
Enum.reduce_while(stream, 0, &(
cond do
&1 < 4000000 and rem(&1, 2) == 0 ->
{:cont, &2 + &1}
&1 < 4000000 ->
{:cont, &2}
true ->
{:halt, &2}
end
))
Can anyone spot a way to make my code fit the elixir paradigm more? Are there things I could improve?
Toby Speight
87.2k14 gold badges104 silver badges322 bronze badges
-
\$\begingroup\$ Not sure why the downvote, if this isn't the purpose of this site then what is? \$\endgroup\$Dylan– Dylan2019年07月01日 21:23:44 +00:00Commented Jul 1, 2019 at 21:23
-
1\$\begingroup\$ Someone has voted to close it as "Unclear what you're asking". I don't see why this would be considered unclear though, and this looks very much ontopic. \$\endgroup\$Carcigenicate– Carcigenicate2019年07月01日 21:44:06 +00:00Commented Jul 1, 2019 at 21:44
-
\$\begingroup\$ Someone seems to have raised a "Unclear what you're asking" close vote. But you have added that to your question since then, so your question should be good to go. \$\endgroup\$AlexV– AlexV2019年07月01日 21:45:09 +00:00Commented Jul 1, 2019 at 21:45
1 Answer 1
\$\begingroup\$
\$\endgroup\$
1
I'd improve two things:
- take advantage of ability to specify multiple clauses for anonymous function,
- use underscore for big numbers to improve code readability.
My take on your code:
{0, 1}
|> Stream.unfold(fn {a, b} -> {a, {b, a + b}} end)
|> Enum.reduce_while(0, fn
value, acc when value < 4_000_000 and rem(value, 2) == 0 -> {:cont, acc + value}
value, acc when value < 4_000_000 -> {:cont, acc}
_value, acc -> {:halt, acc}
end)
answered Jul 8, 2019 at 14:38
-
1\$\begingroup\$ Also, I like your use of an explicit
fn
over the submitters&
- the latter is often hard to read and usually I will only use it for very short stuff, probably just the&function/arity
construct and nothing else. \$\endgroup\$cdegroot– cdegroot2019年07月30日 23:30:59 +00:00Commented Jul 30, 2019 at 23:30
default