加载模块和Haskell GHCi的难度

时间:2018-01-03 07:10:24

标签: haskell

我有一个包含以下代码的文本文件:

fib 0 = 1

fib 1 = 1 

fib n = fib (n-1) + fib (n-2)

evenOdd n = if (mod n 2) == 0 then 1 else 0

sumFib 0 = 0

sumFib 1 = 0

sumFib n = (evenOdd (fib n))*(fib n) + sumFib (n-1)

基本上,我正在尝试定义三个函数,第三个函数依赖于前两个函数。但是,当我在GHCi中加载它时,虽然fib工作正常,evenOdd给了我以下错误:

  

interactive>:1:1:1错误:变量不在范围内:evenOdd :: Integer    - >吨

这让我感到困惑,因为如果我在* Main>中输入完整的代码行,则evenOdd工作正常。我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:2)

在我的ghci上,一切似乎都很好。正如您可以使用fib我确定您正确加载了文件,但在实际加载之前将evenOdd添加到文件后似乎没有保存。

尝试:

  • 先保存文件
  • :l filename.hs
  • evenOdd 10

这适用于我的设备。如果由于某种原因,这仍然无法正常工作,您可以尝试运行:edit filename.hs来查看实际加载的文件。也许这个文件与您预期的版本不同/不同。

我的终端输出:

➜  Desktop ls
PO.pptx     untitled.hs
➜  Desktop ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Prelude> :l untitled.hs
[1 of 1] Compiling Main             ( untitled.hs, interpreted )
Ok, 1 module loaded.
*Main> fib 20
10946
*Main> evenOdd 2023
0
*Main> evenOdd 2
1
*Main>