[Haskell-beginners] Concatenating lists

Jan Erik Moström lists at mostrom.pp.se
Thu Mar 22 16:54:58 CET 2012


On 2012-03-22 at 16:12 , Felipe Almeida Lessa wrote:
> Your conclusion is correct, but your reasoning is not. It's not due
> to lazyness that x is recursively defined, it's because of the scope.
> When you type your second x on the second line, that x will refer to
> the closest (in scope) definition of something called x -- which is
> the the definition of x on the second line itself.

Aha, thanks for explaining. I didn't consider scope - I did some searching of scoping and need to think about that for a while, a bit different than 'normal'. However, I would like to ask one more thing:

Assume

let a = 5 + 3

Would 5+3 be calculated directly or would it be deferred to later?
Assume it's calculated and the value 8 is given the name 'a'. Then

let a = a + 4

What happens is that Haskell tries to evaluate the second 'a' on that line and then finds the first 'a' and enters into infinite recursion.

And this is what confuses me a little bit. I can type in 'let a = a + 4' and Haskell accepts it, the infinite recursion does not happen until I type 'a' to show the value, this makes me think that the evaluation is deferred to later (and also why I asked about 5+3). Is this correct?

- jem



More information about the Beginners mailing list