Переменные внутри блока if нельзя использовать вне блока в Haskell, что вызывает это? - PullRequest
0 голосов
/ 06 февраля 2012

И есть ли способ исправить это, чтобы я мог использовать их также снаружи? Заранее спасибо. У меня есть что-то вроде этого:

if(x==1)
   then
       someList<-aFunction (1,2)
   else
       someList<-aFunction (3,4)


steps involving someList here

Ответы [ 2 ]

8 голосов
/ 06 февраля 2012

В данном конкретном случае

someList <- aFunction (if x == 1 then (1,2) else (3,4))

решит это. Помните, что if ... then ... else ... - это выражение в Haskell.

4 голосов
/ 06 февраля 2012

Вы неправильно поняли переменные в Haskell: как только они определены, они никогда не меняют своего значения, поэтому, если вы надеетесь выполнить присваивание внутри ветви, это не сработает.Однако может помочь следующее:

 let x = if (cond) then .. else .. in f x

Будьте осторожны, чтобы не читать x в if-then-else, если вы не знаете, что делаете :-) Еще одно напоминание: если вы используете другой let x = .. внутри этой конструкции, она будет "затенять" внешнюю x, поэтому она будет фактически новой, новой переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...