2012-04-13 1 views
9

Я пытаюсь вложить пару утверждений let, но я получаю синтаксические ошибки, которые не имеют для меня смысла. Я действительно новичок в программировании Haskell, поэтому я уверен, что это то, что я просто не понимаю (возможно, связано с интервалом). Я понимаю, что let и in должны находиться в одной колонке.Как вложить разрешения в Haskell?

Почему это, что:

aaa = let y = 1+2 
      z = 4+6 
     in y+z 

отлично работает, в то время как

aaa = let y = 1+2 
      z = 4+6 
      in let f = 3 
       e = 3 
      in e+f 

дает мне ошибку: "ошибка синтаксиса в выражении (неожиданную` = ')"

+3

Вне темы, но let-выражения рекурсивно связаны по умолчанию, поэтому вложение let внутри let крайне редко необходимо. –

+0

Что означает John L, так это то, что вы можете объединить внутренние и внешние утверждения let в один оператор. –

+1

Правильно, я понимаю, это было в образовательных целях. Я пытался выяснить, был ли язык статически или динамически охвачен без ссылки на руководство. – Nico

ответ

19

В второй пример, z = ... не согласован с y = .... В блоке let каждое определение должно быть выровнено.

Я подозреваю, что вы вставляете символы табуляции, и ваш редактор должен отображать вкладки размером менее 8 пробелов, что делает его похожим на то, что он выровнен. Вы должны заменить вкладку пробелами и, предпочтительно, настроить редактор для расширения вкладок в пробелы, чтобы избежать подобных проблем в будущем.

+0

Это несоответствие было моей ошибкой, когда я скопировал свой код в свой браузер, но вы были правы в использовании пробелов вместо вкладок. У меня было несколько вкладок, и это полностью испортило все. Заменил его пробелами, и это сработало как шарм, большое спасибо! – Nico

+3

@Nico Я бы предложил вам вернуться к редактированию, поэтому он соответствует объяснению в этом ответе, так что люди, которые находят это, не запутаются. – chamini2