2016-04-24 1 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

Я не могу воспроизвести полученную вами ошибку. Если вы пишете этот код в файл и компилировать его с 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

Смежные вопросы