我是编程和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
我的代码中是否有错误或我是否尝试错误地使用该程序?
答案 0 :(得分:3)
问题不在于类型,没有变量a
,b
,c
,d
,{{1 }和e
存在。您不能使用不存在的变量。