
PR Stanley wrote:
Yes and thanks for the reply. When a function is declared in C the argument variable has an address somewhere in the memory: int f ( int x ) { return x * x; }
any value passed to f() is assigned to x. x is the identifier for a real slot in the memory (the stack most likely) made available for f(). Is this also what happens in Haskell?
It is not, in my opinion, an unreasonable intuition. What's interesting to note is that because haskell values are immutable, there is no need for this to be a *new* memory location. In fact, in a typical simple haskell implementation what f is actually passed is a pointer to to the existing memory location. Procedure call in haskell doesn't normally involve argument copying, because with immutability there is no need for copying. Of course 'x*x' is a new value, so new memory is definitely allocated for that. The next epiphany of understanding is when you realise that what actually goes into that new memory is a code pointer, rather than a value. Instead of calculating 'x*x' the compiler simply chucks a pointer to the code which, when called, will calculate x*x. This code is only called if needed. Jules