I played with expunging the explicit call to $ev from makelist, but I
don't understand the ways of ev:
(%i179) ev('('(x[i])), x[i] = 6);
(%o179) 6
(%i180) ev('('(x)), x = 6);
(%o180) x
Actually, allowing the second argument of makelist (and similarly sum
and product) to be a subscripted variable is a troublemaker. The idea
of making makelist pretty much work as
makelist(e,x,lo, hi) = map(lambda([x], e), [lo, lo+1, ..., hi])
fails when x is a subscripted variable (lambda([x[i]], x[i]^2) is
invalid). And a substitution for x[i] doesn't work because
substitute doesn't respect quotes: subst(a=b,'a) --> b.
I give up.
--Barton