Re: Course-of-value recursion by defining a sequence as a self-referential infinite list

Henning Thielemann <[email protected]>
Newsgroups gmane.comp.lang.haskell.cafe
Message-ID <[email protected]>
On Sun, 19 Jan 2025, Vanessa McHale wrote:

> Laziness turns out to allow course-of-value recursion where one might 
> use memoization in other languages. But I hadn’t seen this articulated!

> Famously, one can use this to define the Fibonacci numbers, viz.
> 
> fibs :: [Integer]
> fibs = 1 : 1: zipWith (+) fibs (tail fibs)

This example is old and well-known, right?


> Or the Catalan numbers:
> 
> catalan :: [Integer]
> catalan = 1 : 1 : [ sum [ (-1)^(k+1) * (pc (n - ((k*(3*k-1)) /. 2)) + pc (n - ((k*(3*k+1))/.2))) | k <- [1..n] ] | n
> <- [2..] ]
>   where
>     pc m | m >= 0 = part !! m | otherwise = 0
> 
>     infixl 6 /.
>     (/.) = quot


I have:

catalanNumbers :: Num a => [a]
catalanNumbers =
    let xs = 1 : PowerSeries.mul xs xs
    in  xs

https://hackage.haskell.org/package/combinatorial-0.1.1/docs/src/Combinatorics.html#catalanNumbers

_______________________________________________
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.