Отступы — это то, что не неправильно в коде, как показано здесь. Я подозреваю, что у вас есть вкладки в исходном файле, который вы пытались скомпилировать, верно? Всегда делайте отступы пробелами, а не табуляцией, это намного надежнее. Вы можете просто скопировать и вставить обратно код, как он появляется здесь, у вас нет этой проблемы.
Хотя, честно говоря, в коде довольно много других проблем. Во-первых, вы неправильно написали reverse
как revers
и использовали переменную z
, которая нигде не определена (вы имеете в виду div (x+y+u) 2
). Тогда вы забыли написать 2 в mod (x+y+u) 2
. Кстати, Хаскеллеры обычно пишут такие функции, как div
и mod
, в инфиксной нотации:
... = ((x+y+u)`mod`2 : binadd' xs ys) ((x+y+u)`div`2)
По какой-то причине это читается более бегло, IMO, а также не позволяет вам так легко забывать аргументы.
Строка по-прежнему неверна: у вас есть две непересекающиеся группы в скобках ((x+y+u)`mod`2 : binadd' xs ys)
и ((x+y+u)`div`2)
. Помещение двух вложенных выражений подряд одно за другим всегда означает, что первое является функцией, а второе — аргументом этой функции. Но не в этом случае: ((x+y+u)`mod`2 : ...)
может быть только списком, а не функцией. Однако binadd' xs ys
по-прежнему является функцией, потому что вы снова забыли аргумент. Этот аргумент является другим родительским блоком: вы хотите binadd' xs ys ((x+y+u)`div`2)
. Если вы поместите голову перед этим, вы можете полностью удалить внешние скобки:
... = ( (x+y+u)`mod`2 : binadd' xs ys ((x+y+u)`div`2) )
≡ (x+y+u)`mod`2 : binadd' xs ys ((x+y+u)`div`2)
Вероятно, есть еще проблемы, но, пожалуйста, попробуйте найти их самостоятельно!
person
leftaroundabout
schedule
24.07.2014
[000000001]
это то же самое, что и[1]
, верно? Кроме того,mod
нужно два аргумента, но вы дали ему только(x+y+u)
и ожидаете, что результатом будет число. — В любом случае... пожалуйста, добавьте к такому вопросу фактическое сообщение об ошибке! - person leftaroundabout   schedule 25.07.2014