递归序列生成(haskell函数)

时间:2015-11-14 19:01:57

标签: haskell recursion

下面给出了一个用于生成递归序列的小型haskell函数。我在使用floor函数时遇到类型错误。我想,楼层功能正在期待RealFrac。代码和错误如下所示。

main = do
    print( funSeq 9)

funSeq n = do 
    if (n<4)
        then 1
        else floor ((funSeq (n-1) + funSeq (n-2)) * (funSeq (n-3)/ funSeq(n-4)))

错误:

No instance for (RealFrac a0) arising from a use of 'funSeq'

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是在其中添加一些fromIntegral

main :: IO ()
main = do
    print( funSeq 9)

funSeq :: Int -> Int
funSeq n = do 
    if (n<4)
        then 1
        else floor (fromIntegral (funSeq (n-1) + funSeq (n-2)) * (fromIntegral (funSeq (n-3)) / fromIntegral (funSeq(n-4))))

给出了

λ> :main
78

尝试整理一下:

funSeq :: Int -> Int
funSeq n
  | n < 4 = 1
  | otherwise = floor $
      (fromIntegral $ funSeq (n-1) + funSeq (n-2))
      * (fromIntegral . funSeq $ n-3) / (fromIntegral . funSeq $ n-4)

但是你很难看到你想要的是什么 - 你funSeq的预期类型是什么(没有序列;))?