2017-02-08 27 views
4

我今天就开始在哈斯克尔,并且我在ghci上执行的所有功能都显示此消息。我只是想知道这是为什么happenning.I知道,存在很多关于这个问题,但是这是一个简单的例子,我需要知道这个错误在开始时错误haskell:不在范围内。这是什么意思?

function3 :: Int -> [Int] 
function3 x = [a | a <- [1..x] mod a x == 0] 
+4

“不在范围内”意味着您正在尝试使用未在您尝试使用它的地方定义的名称。在这种情况下,发生这种情况的原因是你在'[1..x]'后面留下了一个逗号,所以你在列表理解中的'a'定义不能正常工作。将其更改为'[a | a < - [1..x],mod a x == 0]' – duplode

+1

如果在问题中包含整个GHCi错误消息,它会有所帮助。 – wizzup

回答

5

,当你键入错误没有发生GHCi中的函数类型?

$ ghci 
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help 
Prelude> function3 :: Int -> [Int] 

<interactive>:1:1: error: 
    Variable not in scope: function3 :: Int -> [Int] 
Prelude> 

如果是的话,你必须使用多行输入

Prelude> :{ 
Prelude| function3 :: Int -> [Int] 
Prelude| function3 x = [a | a <- [1..x], mod a x == 0] 
Prelude| :} 

而之前mod

指出,另外,为了更好的工作流程,您可以将您的密码保存到一个文件并使用GHCi负载:load

$ cat tmp/functions.hs 
function3 :: Int -> [Int] 
function3 x = [a | a <- [1..x], mod a x == 0] 

$ ghci 
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help 
Prelude> :l tmp/functions.hs 
[1 of 1] Compiling Main    (tmp/functions.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> :t function3 
function3 :: Int -> [Int] 
*Main>