2015-08-30 5 views
1

Я не совсем понимаю, почему бросает исключение интерпретатора Хаскеля следующее:Определение переменных в Haskell

... 
Prelude> let x = 3 
Prelude> x 
3 
Prelude> let x = x + 1 
Prelude> x 
*** Exception: <<loop>> 

х + 1 выводит результат 4, однако, почему я не могу сохранить его обратно в х , Он работает, когда я храню его в переменной y. Может ли кто-нибудь объяснить, почему это происходит?

+2

В Haskell * нет переменных *. Только константы. – AJFarmar

+1

AJFarmar выше меня прав, но у вас есть 'STRef' и 'IORef'. – MasterMastic

+0

Для чего 'x' делает' x = x + 1'? Вы думаете о бесконечности? – PyRulez

ответ

10

В вашей сессии GHCi x = x + 1 не является делом x, который вы определили ранее, но изменил определение x. Первое определение, x = 3, не используется вообще. Далее можно понять, заменив x с новым определением ...

x 
x + 1 
(x + 1) + 1 
((x + 1) + 1) + 1 
-- ad infinitum 

... что приводит к бесконечной рекурсии.

+0

Спасибо за объяснение, это прояснило это. – killuminati

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