Don't shoot me...

The last exchange with Andrew Bromage made me recall a homework which was
given to some students by a particularly nasty teacher I happen to know.

The question is to generate the whole infinite Rabbit Sequence in one
shot (co-recursive, selbstverständlich).

The Rabbit Sequence:
1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,0,...
may be obtained in two ways.

A.
1. Begin with one *young* rabbit: 0.
2. In one unit of time a young rabbit grows, becomes *old*: 1.
3. In one unit of time an old rabbit has an offspring, transmutes into [1,0]
 (Yes, the rewriting order is meaningful).

The evelution continues...
So, after three units we have: 1 0 1. After four: 10110. Then 10110101. Etc.

B.
The n-th instance fulfils the recurrence

rs 0 = [0]
rs 1 = [1]
rs n = rs (n-1) ++ rs (n-2)
===

That's it, you see now what is the relation between the Rabbit Sequence
and Fibonacci.

This nasty acquaintance of mine asked the students to write down a simple
procedure which generates the sequence after the infinite number of units
of time. Of course, any finite prefix of it.

The pedagogical result was a disaster. Some students began to work, but
then the teacher went crazy and demanded the solution (in Haskell) as
a one-liner. Just one line, and standard Prelude functions, nothing more.
So, the students thought that if it is a one liner, it must be stupid, and
abandoned this exercise.

Would somebody try to solve it, before I unveil the solution? It isn't
difficult.

Jerzy Karczmarczuk


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to