Re: Course-of-value recursion by defining a sequence as a self-referential infinite list
Douglas McIlroy <[email protected]>
| Newsgroups | gmane.comp.lang.haskell.cafe |
|---|---|
| Message-ID | <CAKH6PiUL5hJEP3A2tXxGuo6cLG68p37TUwbF8NRRoXknRuvXiQ@mail.gmail.com> |
>> Karczmarczuk’s solution via the Haskell prelude:
>>
>> part = 1 : b 1
>> where b n = (1 : b (n + 1)) + (replicate n 0 ++ b n)
>>
> This is broken code, no?, just 2 reasons I can spot why:
> - function 'b n' calls 'b n' unconditionally (infite loop)
> - What is the reutrn type of 'b'? It seems like it returns list, but the
> return value is in the form 'a + b' , where (+) is instance of num so
> I don't think prelude contains any ad-hoc definition of (+) that
> returns list
Not broken, just insufficiently documented. "part "is supposed to produce
an infinite stream whose nth element is the number of distinct
representations of n as a sum of positive integers.
The "infinite loop" is deliberate, quite like
ones = 1 : ones
which generates an infinite sequence of 1s.
It is not stated, but the (+) is understood to have been overloaded to
handle lists of Nums in the natural way
Doug
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.