【问题标题】:Catalan numbers in functional languages [closed]功能语言中的加泰罗尼亚数字[关闭]
【发布时间】:2014-03-06 04:43:29
【问题描述】:

加泰罗尼亚数满足递归

当然,加泰罗尼亚数有一个包含二项式系数的封闭式表达式。我们也可以单独用 C_{n-1} 来表示 C_n。我想知道的是如何在 SML 或 Haskell 等函数式语言中实现这种卷积。

【问题讨论】:

  • 你有没有尝试过?
  • @OliCharlesworth:我什至不知道从哪里开始。
  • 但同样,我们甚至不知道从哪里开始帮助您。请更具体地说明当前阻止您的原因。
  • 查看rosettacode.org/wiki/Catalan_numbers 的一系列实现,并询问您在那里找到的代码存在的具体问题。

标签: haskell functional-programming sml recurrence catalan


【解决方案1】:

当然,您可以在 haskell 中实现加泰罗尼亚数字(我认为 ml-family 也足够强大)!

但我想这不是您要寻找的答案。所以我希望你熟悉基本的 haskell 语法,将加泰罗尼亚数字视为函数catalan :: Int -> Int 任何自然数系列都是这样的函数(适用于小型索引)。但是随着加泰罗尼亚数字的快速增长,我将选择Integers(=任意大整数)类型作为我们函数的共域。

catalan :: Int -> Integer
catalan 0 = 1
catalan n = sum [ ?catalan magic? | i <- [1..n]]

我知道我几乎解决了这个问题,但仍然有加泰罗尼亚魔法 ;-) 你必须自己做。

但在我停止一些警告之前

  • 这个版本的加泰罗尼亚数字计算不是最优的或有效的
  • 不处理负输入值的情况。

【讨论】:

  • 附注另一种解决方案可能涉及函数zipWithreverse(*),当然还有sum
  • 在 Haskell 中,您可能只需要创建一个包含所有加泰罗尼亚数字的无限列表。假设您将类型限制为[Integer],那也有利于记忆。
  • 这就是我在评论中想要表达的意思——只是不那么明确,以便@Kuai 可以学到一些东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多