Soy un mal cacher: A veces, cuando nadie está mirando, guardo los resultados sin incluir el contexto completo como el siguiente:Mathematica: Cómo borrar el caché de un símbolo, es decir, Unset sin patrones DownValues
f[x_]:=f[x]=x+a;
a=2; f[1];
DownValues[f]
Out[2]= {HoldPattern[f[1]]:>3,HoldPattern[f[x_]]:>(f[x]=x+a)}
Esto conduce a errores terriblemente sutiles, y, más importante aún, a la necesidad de borrar el caché cuando cambio el contexto. Una forma de borrar el caché es completamente el símbolo Clear
y repetir las definiciones, pero esto no es realmente una solución.
Lo que realmente me gustaría es un método para borrar todos los DownValues sin patrón asociados con un símbolo.
Para mayor claridad, voy a incluir mi solución presente como una respuesta, pero si falla por dos razones
- Sólo se borra DownValues con todos los argumentos numéricos
- Por razones estéticas, me gustaría evitar usando
Block
para agarrar los DownValues.
¿Alguna idea sobre cómo mejorar ClearCache
?
_? (FreeQ [#, Pattern] &) ... wow! –
@belisarius: Tu comentario sin un voto explícito me vuelve paranoico porque he hecho algo estúpido ... Una solución simple no significa que soy un simplón, ¿o sí? – Simon
@Simon Me acabo de olvidar. ¡Me avergüenza! Ese patrón es brillante. –