我如何才能有效地生成无限的加泰罗尼亚数字列表?我现在所拥有的工作相当快,但在我看来应该有更好的方法。
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)])
我意识到(++)
并不理想
这种更好的方法存在吗?可以使该功能足够懒惰吗?我知道,n th有一个明确的公式,但我宁愿避免它。