首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bell数的Haskell实现

Bell数的Haskell实现
EN

Stack Overflow用户
提问于 2016-04-13 19:56:19
回答 1查看 309关注 0票数 0

我正试图在Haskell中实现一个铃号查找器+求和器。我很有信心我的方法是正确的,但是我在编译时遇到了一些错误。我当前的错误消息是:

代码语言:javascript
复制
[1 of 1] Compiling Main             ( survey2.hs, survey2.o )
survey2.hs:5:14:**
    Expected a constraint, but ‘Integer’ has kind ‘*’
    In the type signature for ‘binomial’:
      binomial :: (Integer, Integer) => Integer

survey2.hs:15:12:
    Expected a constraint, but ‘Integer’ has kind ‘*’
    In the type signature for ‘bellSum’: bellSum :: Integer => Integer**

我对haskell完全陌生,对函数式语言也完全陌生。基于这个错误,我尝试更改我的“函数定义”(或者您在Haskell中称之为函数定义),但我似乎只会导致更多的错误。

程序的最终目标是打印铃号0-9的和。

代码语言:javascript
复制
factorial n
  | n <= 1    = 1 
  | otherwise =  n * factorial(n-1)

binomial :: (Integer, Integer) => Integer
binomial n k 
  | k > n     = 0 
  | k < 0     = 0 
  | otherwise = factorial(n) / factorial(n-k) * factorial(k)

bell n
  | n <= 1    = 1 
  | otherwise = sum [ binomial (n-1, k-1)  * bell (k-1) | k<-[0..n-1] ] 

bellSum :: Integer => Integer  
bellSum n = sum [ bell(k) | k<-[0..n] ]

main = bell(9 :: Integer)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 20:07:40

注意,这是不一致的(=>应该是->)

代码语言:javascript
复制
binomial :: (Integer, Integer) -> Integer
binomial n k 

要么更改为

代码语言:javascript
复制
binomial :: Integer -> Integer -> Integer
binomial n k 

代码语言:javascript
复制
binomial :: (Integer, Integer) -> Integer
binomial (n, k)

对于您来说,另一个提示是,您可以不使用阶乘函数(甚至乘法)计算二项式。

代码语言:javascript
复制
binomial n k | k==0 || k==n = 1
             | k==1 = n
             | otherwise = binomial (n-1) (k-1) + binomial (n-1) k

这仍然是非常低效的,但可以回忆录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36608331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档