Haskell编写斐波那契序列时takeWhile报参数过少错误如何解决
Haskell斐波那契代码错误修复说明
你代码中存在以下核心错误:
- 重复定义了标准库自带的
takeWhile函数,且自定义实现的语法完全不符合Haskell规范:- 类型签名末尾多了多余的冒号
- 函数参数个数不匹配,
takeWhile需要接收「判断条件函数」和「待过滤列表」两个参数,你的定义只写了一个参数 - 守卫语法错误,守卫位置必须是布尔表达式,你直接写
takeWhile作为判断条件完全不合法 - 代码中使用的变量
n没有任何声明和赋值,属于未定义变量
fibList是无限斐波那契列表,不是函数,你在main中写fibList 10属于错误的函数调用写法
可运行的修正后代码
fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n - 2) -- 生成无限斐波那契列表 fibList :: [Int] fibList = map fib [0..] main :: IO () main = do putStrLn "请输入最大值n:" n <- readLn :: IO Int putStrLn $ "不超过" ++ show n ++ "的斐波那契序列为:" -- 直接调用标准库自带的takeWhile即可满足需求 print $ takeWhile (<=n) fibList
如果你只需要输出前10项斐波那契数,将main中的print行替换为print $ take 10 fibList即可。
内容的提问来源于stack exchange,提问作者JQD
相关产品推荐
相关产品推荐

