Utilizando `With` con una lista de` Reglas` - pero sin afectar el comportamiento normal de `With`

Di que tengo una lista deRules

rules = {a -> b, c -> d};

que uso en un cuaderno. Entonces, en un punto, tiene sentido querer que se apliquen las reglas antes de que cualquier otra evaluación tenga lugar en una expresión. Normalmente, si quieres algo como esto, usarías

In[2]:= With[{a=b,c=d}, expr[a,b,c,d]]
Out[2]= expr[b, b, d, d]

¿Cómo puedo tomarrules e insértelo en el primer argumento deWith?

Edita

Ambo Algunas soluciones fallan hacen todo lo que estaba buscando, pero debería haber enfatizado este punto un poco más. Vea la parte en negrita arriba.

Por ejemplo, echemos un vistazo a

rules = {a -> {1, 2}, c -> 1};

Si uso estos vaules enWith, Yo obteng

In[10]:= With[{a={1,2},c=1}, Head/@{a,c}]
Out[10]= {List,Integer}

Algunas versiones deWithRules rendimient

In[11]:= WithRules[rules, Head/@{a,c}]
Out[11]= {Symbol, Symbol}

(Actualment, No me di cuenta de que la respuesta de Andrew tenía el atributoHoldRest - por lo que funciona tal como yo quería.)

Respuestas a la pregunta(3)

Su respuesta a la pregunta