【发布时间】:2019-08-30 21:12:53
【问题描述】:
如何有效地生成无限加泰罗尼亚数字列表?我现在所拥有的工作相当快,但在我看来应该有更好的方法。
c 1 = 1
c n = sum (zipWith (*) xs (reverse xs)) : xs
where xs = c (n-1)
catalan = map (head . c) [1..]
我尝试改用fix,但 lambda 不够懒惰,无法终止计算:
catalan = fix (\xs -> xs ++ [zipWith (*) xs (reverse xs)])
我意识到(++) 并不理想
这样更好的方法存在吗?可以使该功能足够懒惰吗?第 nth 有一个明确的公式,我知道,但我宁愿避免它。
【问题讨论】:
-
你的
c函数没有编译,因为它的价值。但是,假设您确实将其调整为工作形式,我认为您要查找的内容并不完全清楚。 “更好”是什么意思——它只是你追求的速度吗?在这个问题的上下文中,你认为“懒惰”是什么意思?
标签: haskell recursion numbers catalan