# [Haskell-cafe] Assignment, Substitution or what?

PR Stanley prstanley at ntlworld.com
Tue Oct 2 20:42:41 EDT 2007

```> > > f x = x + x
> > > Is the "x" use to create a pattern in the definition and when f is
> > > called it's replaced by a value?
> >
> >Those equation-like definitions are syntactic sugar for lambda
> >abstractions. f could as well be defined as f = \x -> x + x.
>
>
>
>First, the
>
>f x =
>
>part says that f is a function which takes a single parameter,
>called x.  The other side of the = sign gives the function body: in
>this case, x + x.  This is exactly the same thing that is expressed
>by the lambda expression
>
>\x -> x + x
>
>This expression defines a function that takes a single parameter
>called x, and returns the value of x + x.  The only difference is
>that with the lambda expression, this function is not given a
>name.  But you can easily give the function a name (just as you can
>give any Haskell expression a name) by writing
>
>f = \x -> x + x
>
>In general, writing
>
>g x y z = blah blah
>
>is just a shorthand for
>
>g = \x -> \y -> \z -> blah blah.
>
>That is, it simultaneously creates a function expression, and
>assigns it a name.
>
>Does that help?

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?
Thanks, Paul

```