2016-04-24 164 views
-1

我的代碼:我的Haskell代碼有什麼問題?

addConcat :: [Int] -> [Int] 
addConcat [x,y] = z:(z + y) where (z = x + y) 

我的功能實現不完全是一個以上,但它是相同的格式,我總是得到:

Syntax error in input (unexpected symbol "y") 

那麼,什麼是錯我的Haskell代碼?我真的需要使用'where'子句,但我認爲我做錯了什麼。

回答

3

我無法重現您聲稱獲得的錯誤。如果您正在使用ghc編寫代碼到一個文件和編譯它的錯誤是:

<filename>.hs:2:38: parse error on input ‘=’ 

而問題是,where語法是錯誤的。無論是寫:

an_expression where z = x+y 

或者你必須使用括號:

an_expression where {z=x+y;} 

不能使用括號組的分配。

注意,在ghci中寫的時候,你必須組合在一起的聲明和使用let定義函數:

Prelude> let {addConcat :: [Int] -> [Int]; addConcat [x,y] = [z,z+y] where z=x+y;} 
Prelude> addConcat [1,2] 
[3,5] 

還要注意的是,即使解決這個您的功能還有一個類型的錯誤,因爲:第二個參數必須是一個列表,而z+y是一個數字。您想要z:[z+y]或更簡單[z, z+y]

+0

非常感謝你!大括號的東西完美的工作!你真棒! – thelili018