# looping in tabular

I am curious to know why the following failed. A similar thread is on comp.text.tex unanswered. Of course, other manipulations of \whileexpr work, but why does this fail?

\documentclass{article}
\makeatletter
\def\whileexpr#1\do#2{%
#1#2\expandafter\@iden\else\expandafter\@gobble\fi
{\whileexpr#1\do{#2}}%
}
\newcount\colnum
\newcommand\generaterow[2]{%
\colnum\z@
\whileexpr\ifnum\colnum<#2\relax\do{%
}%
}
\makeatother

\begin{document}
% Test (worked):
\generaterow{x}{3}% -> x1x2x3

% Failed:
\begin{tabular}{|*{4}{c|}}
\hline
x\generaterow{&}{3}\\\hline
\end{tabular}

\end{document}

-
Please take a look over the questions you've asked and see if you can 'accept' some of the answers. When there is an answer that 'works for you' it's a good idea to accept it. – Joseph Wright Dec 8 '11 at 22:10
@Joseph: Which questions? This is my first question here in 12 months. Or are you referring to comp.text.tex? I can't find any answer there. – Ahmed Musa Dec 8 '11 at 22:17
@AhmedMusa: See the questions you've asked on TeX.SX. They're found in your profile. – Werner Dec 8 '11 at 22:19
I have seen the problem: conditionals can't be split across & in \halign. Each cell is executed in an alignment group. The following worked. It allows the conditional to complete execution before the material (including the alignment character &) is placed/executed.
\def\whileexpr#1\do#2{%