运行Haskell代码时出错

时间:2016-07-26 22:49:56

标签: haskell

我是编程和Haskell的新手,所以如果这是初级的那么应用。

我在运行下面的程序时遇到问题,但我不确定这是程序错误还是我不知道如何使用ghci

我编写了一个行为喜欢last的程序,但却返回列表中倒数第二个项目。

我的代码是

main :: IO ()
main = return ()    
lastButOne::[a]->a
lastButOne xs = if length xs == 2
                then head xs
                else lastButOne (tail xs)

该程序编译得很好,但我似乎无法找到一种方法来运行它而不会给我一个错误。

教科书通过在drop

中执行以下操作,提供了运行模拟ghci的程序的示例
ghci> :load myDrop.hs
Ok, modules loaded: Main.
ghci> myDrop 3 "asdfg"
"fg"

但是,当我加载lastButOne.hs并尝试提供程序输入时,我得到以下内容

Prelude> :load lastButOne.hs
[1 of 1] Compiling Main             ( lastButOne.hs, interpreted )
Ok, modules loaded: Main.
*Main> lastButOne [a,b,c,d,e,f]

<interactive>:2:13: error: Variable not in scope: a

<interactive>:2:15: error: Variable not in scope: b

<interactive>:2:17: error: Variable not in scope: c

<interactive>:2:19: error: Variable not in scope: d

<interactive>:2:21: error: Variable not in scope: e

<interactive>:2:23: error: Variable not in scope: f

但是当我检查lastButOne的类型时,看起来我正在给它正确的输入类型,即列表:

lastButOne :: [a] -> a

我的代码中是否有错误或我是否尝试错误地使用该程序?

1 个答案:

答案 0 :(得分:3)

问题不在于类型,没有变量abcd,{{1 }和e存在。您不能使用不存在的变量。