我目前正在处理99个haskell问题
我无法理解为什么我在这个函数中出错: -
repli :: [a] -> Int -> [a]
repli xs n = concatMap (take n . repeat) xs
答案 0 :(得分:5)
如果您使用的是REPL,请尝试
>>> let repli xs n = concatMap (take n . repeat) xs
在REPL(ake GHCi)中编写Haskell与将其写入文件有点不同。首先,变量绑定和函数定义必须以let
为前缀,如
>>> let a = 1
>>> let f x = x + a
另一方面,您通常必须在一行中输入所有定义。您可以使用分号分隔单独的定义,例如
>>> let a = 1; b = 2
或者您可以使用多行模式,例如
>>> :{
>>> let c = 3
>>> d = 4
>>> :}
如果您已经了解了monads(对吗?)那么您可以想象您在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!
>>>