为什么我得到“=”
问题描述:
语法错误,我目前正在99个哈斯克尔问题为什么我得到“=”
我不明白为什么我得到一个错误,在此功能: -
repli :: [a] -> Int -> [a]
repli xs n = concatMap (take n . repeat) xs
答
如果您正在使用在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!
>>>
? – soulcheck 2014-09-03 15:18:40
适合我。你在某处有隐形角色吗? – 2014-09-03 15:45:24
'拿n。 repeat'与'replicate n'相同。在这里并不重要,但如果你愿意的话,它可以使写点免费更容易一些。 – genisage 2014-09-03 19:33:04