1 parsing haskell compilation ghc
我正在研究第二个Euler的问题,但是现在我只是试图定义Fibonacci序列.目前,我将我的Fib功能定义为
Fib 0 = 0
Fib 1 = 1
Fib x = Fib (x - 1) + Fib (x - 2)
Run Code Online (Sandbox Code Playgroud)
因为我希望程序依赖于我的键盘输入,所以我使用了
main = do
putStrLn "Enter desired Fibonacci index: "
"index" <- getLine
putStrLn Fib x
Run Code Online (Sandbox Code Playgroud)
并将x定义为 x = read "index"
我很确定我弄乱了缩进和语法.根据我修改代码的方式,运行"ghc /dir/file.hs会让我感觉不到"不在范围内:数据构造函数`Fib'"或"解析错误(可能是错误的缩进)".我真的,真的不喜欢我知道我在做什么,特别是关于如何设置.hs以便编译友好.我已经阅读了大约7个关于使用GHC进行编译的教程,但他们似乎都跳过他们解释的部分编译的基本要求.
如果有帮助,请告诉我如何更具体.我认为我试图理解的两件事是整个"主要"事物是如何与编译相关的,以及如何让它被识别我已经将Fib定义为函数,即使它说它不在范围内.
PS:我无法弄清楚这里的缩进,Stack似乎想把所有东西放在一行,所以我必须把它全部分开.抱歉.
Fib的第一个字母不应该大写.大写单词表示类型.函数应以小写字母开头.
编译看起来很好!
编译时,您还会遇到其他一些错误.请记住,putStrLn这String是一个参数.你的fib函数返回一个Integer.您可以使用show将值转换为String.
总结一下:
getLine结果应该绑定到a index,而不是"index".第一个是字符串变量,而不是字符串值.putStrLn只接受一个参数(要显示的字符串).在你的程序中,它接收两个参数:一个函数Fib和一些未定义的参数x.x,可能read用于将输入字符串转换为整数值.putStrLn需要一个String并Fib返回一个整数,你需要在传入之前将其转换为:putStrLn (show (Fib x)).