How does Erlang Fare ?

Don Stewart recently wrote a blog comparing the time it took to compute Fibonacci numbers in Ruby, Python and Haskell, according to his results Haskell blew away the competition.

Here are HIS results

Ruby (1.8.5) 64.26s
Python (2.4) 25.16s
Haskell (GHC 6.8) 0.48s
Parallel Haskell (GHC 6.8) 0.42s

Since I am learning Erlang I wanted to see how Erlang does (please note I am a Erlang newbie) so here goes !

The Code

-module(fib).
-export([fib/1,for/2,start/0]).


fib(0) -> 0;
fib(1) -> 1;
fib(N) -> fib(N-1) + fib(N-2).


for(N,N) -> [fib(N)];
for(I,N) -> [fib(I)|for(I+1,N)].


start() -> timer:tc(?MODULE,for,[1,35]).

And the results

{3018587,
[1,
1,
2,
3,
5,
8,
13,
21,
34,
55,
89,
144,
233,
377,
610,
987,
1597,
2584,
4181,
6765,
10946,
17711,
28657,
46368,
75025,
121393,
196418|...]}
2>

That is 3.02 seconds, though not as good as Haskell, it still blew away Ruby and Python. Hey Erlang gurus out there is there any way we can seed this up ?

Advertisements

4 thoughts on “How does Erlang Fare ?

  1. Toby Nance

    Here’s a faster version of fib:

    fib(0) -> 0;
    fib(1) -> 1;
    fib(N) when N > 1 -> fib(N-2, 1, 0).

    fib(0, OneBack, TwoBack) -> OneBack + TwoBack;
    fib(N, OneBack, TwoBack) -> fib(N-1, OneBack + TwoBack, OneBack).

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s