2016-04-24 11 views
-1

マイコード:私のHaskellコードに何が間違っていますか?

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

が、私はそれは同じフォーマットのだと私は常に取得上記ではない正確に一つの機能を実現しています:

Syntax error in input (unexpected symbol "y") 

だから私のHaskellコードと間違って何ですか?私は本当にどこの句を使用する必要がありますが、私は何か間違っていると思います。

答えて

3

あなたが取得したと主張しているエラーは再現できません。

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

そして、問題はwhereの構文が間違っているということです:あなたはファイルにそのコードを書いてghcでそれをコンパイルしている場合は、エラーがあります。どちらの書き込み:

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] 

注意はまだ:の第2引数ので、型エラーがありますリストでなければならず、z+yは数字です。 z:[z+y]以上がほしいと思うのは単に[z, z+y]です。

+0

ありがとうございます!中括弧は完璧に機能しました!あなたは素晴らしいです! – thelili018

関連する問題