kill(all);

definizioni "nidificate" 

a:b;

b:1+c;

c:sqrt(2)+d;

qui maxima esegue 1 valutazione: trova "a" nell'espressione fornita, controlla se "a" è definito,
nel caso sostituisce il simbolo con la sua definizione

a;

qui maxima esegue due valutazioni: una è quella implicita sulle espressioni inserite,
una seconda è richiamata col comando ev. 
La prima valutazione (quella implicita) sostituisce "a" e restituisce l'espressione

ev(b)

dopodiché, una volta valutati i parametri di input, procede con l'esecuzione della funzione ev(...)
la quale restituisce "c"

ev(a);

qui ho in catena
valutazione implicita: ev(ev(a)) -> ev(ev(b))
risolvo ev() interno: ev(ev(b)) -> ev(c)
risolvo ev() estermp: ev(c) -> d

ev(ev(a));

qui procedo con una ulteriore valutazione, ma essendo d non definito, non viene più sostituito nulla

ev(ev(ev(a)));

utilizzando infeval procedo a valutare iterativamente finché non viene più sostituito nulla

ev(a,infeval);

ATTENZIONE: se avessi ulteriormente definitp

d:a 

il comando

ev(a,infeval);

entrerebbe in un ciclo di valutazioni infinito.

è possibile richiedere ulteriori valutazioni utilizzando l'opzione eval, sia entro ev()

ev(a);

ev(a,eval);

che nella valutazione implicita

a;

a,eval;

a,eval,eval;

è possibile valutare un simbolo sotto ipotesi di una identità

pippo;

ev(pippo , pippo = 1);

pippo, pippo=1;

è uno dei modi per assegnare un valore specifico ad un simbolo entro un'espressione.