How to evaluate a noun expresion



I use a  modified version of the newdiff function found in the Maxima 
book section 7.11.
This function output some noun form and after that I have problems to 
evaluate expresions.

My problem can be described with the following function:

F(x):=block([inflag:true],
  if atom(x)=true then 'F(x)
  else
  if inpart(x,0)="+" then  map(F,x)
  else 'F(x));

Hence

(%i2) F(a+b);
(%o2)                             F(b) + F(a)

Assume that I have constructed some expresion like

(%i3) expr:subst(x=a+b,F(x));
(%o3)                              F(b + a)

Now I dont know how to evaluate expr in order to obtain F(b)+F(a) :

(%i4) ev(expr,eval);
(%o4)                              F(b + a)
(%i5) ev(expr,nouns);

*** - Program stack overflow. RESET
and also ev(expr,F) enter in an endless loop.

Some help ?

jose cano