In the TeXbook, there is a macro called \ignorespaces:
\ignorespaces ⟨optional spaces⟩. TeX reads (and expands) tokens, doing nothing until reaching one that is not a ⟨space token⟩.
And there is another macro called \relax for which TeX does nothing.
Is \ignorespaces redundant since it seems that \relax can achieve \ignorespaces's functionality? See the following example:
a\ignorespaces b\ignorespaces
c\ignorespaces \hskip1em d
a\relax b\relax
c\relax \hskip1em d
The effect is the same.


