From Using JSL to Develop Efficient, Robust Applications (EU 2018 415), I learned that there are some functions which evaluate their argument and others which don't:
I wondered about Head. Here everything looks logic ...
f= Expr(x=2);
Substitute(NameExpr(f),Expr(x), Expr(y));
Head(f);
Head is not like Substitute, I can directly use the function name as an argument - and Head returns the head of the expression: Assign()
After checking some other functions which "don't evaluate their argument":
Expr(x=2); // x=2
Name Expr(x=2); // x=2
let's check the result for
Head(x=2)
which is "2" - i.e. the result after evaluating the argument?!?! why is it not assign()?