Below is the representation and user interface fib_sequence
for generating a Fibonacci sequence:
empty_rlist = None
#Representation - start
#Constructor
def rlist(first, rest):
return (first, rest)
#Selector
def first(s):
return s[0]
def rest(s):
return s[1]
#Representation - end
def fib_sequence(k):
prev, curr = 1, 0
def generate_sequence(prev, curr, k):
if k == 0:
return empty_rlist
elif k == 1:
return (curr, empty_rlist)
else:
return rlist(curr, generate_sequence(curr, prev+curr, k - 1))
return generate_sequence(prev, curr, k)
Program output:
>python -i fibonacci_sequence.py >>> fib_sequence(0) >>> fib_sequence(1) (0, None) >>> fib_sequence(2) (0, (1, None)) >>> fib_sequence(3) (0, (1, (1, None))) >>> fib_sequence(4) (0, (1, (1, (2, None)))) >>> fib_sequence(5) (0, (1, (1, (2, (3, None)))))
The above program provides representation as (element, restOfTheList)
.
We have this sequence containers in Python:
>>> tuple = (1, 2, 3, 4)
>>> r = range(1,5)
>>> str = '1234'
Is the representation of the aforementioned Python sequence containers same as the above representation of the Fibonacci sequence abstraction?
If no, can we make the representation of the Fibonacci sequence abstraction better, basically to forward this sequence for further processing by sequence processing functions like map()
filter()
sum()
etc.?