2016-04-24 11 views
-1

Mein Code:Was stimmt nicht mit meinem Haskell-Code?

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

Ich bin über eine Funktion nicht genau das eine Umsetzung, aber es ist das gleiche Format und ich bekomme immer:

Syntax error in input (unexpected symbol "y") 

Also, was mit meinem Haskell-Code ist falsch? Ich muss wirklich die Where-Klausel verwenden, aber ich denke, ich mache etwas falsch.

Antwort

3

Ich kann den Fehler nicht reproduzieren, den Sie behaupten, dass Sie erhalten. Wenn Sie diesen Code in eine Datei schreiben und Kompilieren mit ghc der Fehler ist:

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

Und das Problem ist, dass die Syntax für where falsch ist. Entweder schreiben:

an_expression where z = x+y 

Oder Sie haben geschweiften Klammern verwenden:

an_expression where {z=x+y;} 

Sie nicht Klammer Gruppe einen Auftrag verwenden können.

Beachten Sie, dass, wenn in GHCI Schreiben müssen Sie Gruppe zusammen, um die Erklärungen und eine let verwenden Funktionen zu definieren:

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

Beachten Sie auch, dass selbst Festsetzung dieser Ihre Funktion hat, da das zweite Argument einen Typfehler noch von : muss eine Liste sein, während z+y eine Nummer ist. Sie wollen z:[z+y] oder einfacher [z, z+y].

+0

Vielen Dank !! die Sache mit der geschweiften Klammer hat perfekt funktioniert! Du bist unglaublich! – thelili018

Verwandte Themen