Ignoring the sublis_apply_lambda option, it's possible to rewrite
sublis.lisp to call the CL function sublis. It takes about 10 lines of
code. And you get a generalization:
(%i1) sublis([x^2=a, y= 7], x^2 * y);
`sublis': Bad 1st arg
(%i2) load("sublis.lisp")$
(%i3) sublis([x^2=a, y= 7], x^2 * y);
(%o3) 7*a
This fixes no bugs, so it's just self-amusement.
As for substitution into conditionals, and etc, I think most of the
problems are due to the frailties of the conditional. And I think
subst is supposed do what it is told:
(%i8) subst(x=0, limit(x * f(x,z),z,9));
(%o8) 0
There is no multivariable limit, so we can't do things like
limit(x * f(x,z),[z=9, x=0]) :(