为什么我得到“=”

问题描述:

语法错误,我目前正在99个哈斯克尔问题为什么我得到“=”

我不明白为什么我得到一个错误,在此功能: -

repli :: [a] -> Int -> [a] 
repli xs n = concatMap (take n . repeat) xs 
+4

? – soulcheck 2014-09-03 15:18:40

+0

适合我。你在某处有隐形角色吗? – 2014-09-03 15:45:24

+0

'拿n。 repeat'与'replicate n'相同。在这里并不重要,但如果你愿意的话,它可以使写点免费更容易一些。 – genisage 2014-09-03 19:33:04

如果您正在使用在REPL,尝试

>>> let repli xs n = concatMap (take n . repeat) xs 

写作哈斯克尔在REPL(AKE GHCI)是在文件中写入有点不同。一方面,变量绑定和函数定义必须与let前缀为

>>> let a = 1 
>>> let f x = x + a 

另一个原因是,你通常需要输入全部在一行上定义。您可以用分号分隔单独的定义,这样

>>> let a = 1; b = 2 

,或者您可以使用多行模式,这样

>>> :{ 
>>> let c = 3 
>>>  d = 4 
>>> :} 

如果您已经了解单子(是吗?),然后你可以想象,您在REPL中编写的所有内容都是do块的一部分,该块的类型为IO(),并且在键入它们时执行语句。因此,在一个文件,你可以写

main :: IO() 
main = do 
    name <- getLine 
    let greeting = "Hello " ++ name ++ "!" 
    putStrLn greeting 

而在REPL,你会您使用的是解释写

>>> name <- getLine 
Chris 
>>> let greeting = "Hello " ++ name ++ "!" 
>>> putStrLn greeting 
Hello Chris! 
>>>