kill(all);

I define a variable to check its interaction with the 
function definition

pluto : sqrt(3);

function assignment with :=

fun(pippo) := pluto*pippo^2-topolino;

at call stage
the provided value for the argument is substituted 
wherever the "pippo" placeholder appears at the
function definition/ assignment, THEN evaluation occurs  

function assignment with "define"

define( funbis(pippo), pluto*pippo^2-topolino );

the expression employed to define the function is FIRST
evaluated, then assigned

third way: 
I define an unnamed/anonymous/lambda function, 
then I give it a name

funter : lambda([pippo], pluto*pippo^2-topolino);

the expression evaluation is evidently NOT 
performed at the stage

pluto:sqrt(5);

fun(sqrt(2));

funbis(sqrt(2));

funter(sqrt(2));