Computing Fibonacci in RethinkDB

Yesterday I saw @taybin’s RethinkDB driver for Elixir. I didn’t know anything about the language so I started browsing through the documentation, and stumbled on the obligatory Fibonacci example. Of course I immediately got the itch to compute Fibonacci in ReQL. It turned out to be pretty simple.

First, create a table to store the Fibonacci numbers and insert the two base cases:

r.tableCreate('fib');
r.table('fib').insert([{id: 0, value: 0},
                       {id: 1, value: 1}]);

Now the magic:

// For each of the elements in the array, insert a new row into the
// `fib` table that sums the values of the previous two rows
r.expr([2, 3, 4, 5, 6, 7, 8, 9, 10, 11]).forEach(function(x) {
    return r.table('fib').insert({
        id: x,
        value: r.add(
            r.table('fib').orderBy('id').nth(x.sub(1))('value'),
            r.table('fib').orderBy('id').nth(x.sub(2))('value'))
	});
});

And voila:

r.table('fib').orderBy('id')('value');
// returns [0,1,1,2,3,5,8,13,21,34,55,89]

We might have to prioritize the r.range operator (Github issue #875) so instead of typing out

r.expr([2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);

We could just type r.range(2, 12). A dev team must know its priorities.