2014-09-03 146 views
1

語法錯誤,我目前正在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

回答

5

如果您正在使用在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! 
>>>