【发布时间】:2011-08-23 17:34:34
【问题描述】:
我有以下问题。
f[1]=1;
f[2]=2;
f[_]:=0;
dvs = DownValues[f];
这给了
dvs =
{
HoldPattern[f[1]] :> 1,
HoldPattern[f[2]] :> 2,
HoldPattern[f[_]] :> 0
}
我的问题是我只想提取 f[1] 和 f[2] 等的定义,而不是一般定义 f[_],我不知道该怎么做。
我试过了,
Cases[dvs, HoldPattern[ f[_Integer] :> _ ]] (*)
但它什么也没给我,即空列表。
有趣的是,将 HoldPattern 更改为临时^footnote
dvs1 = {temporary[1] :> 1, temporary[2] :> 2, temporary[_] :> 0}
发行
Cases[dvs1, HoldPattern[temporary[_Integer] :> _]]
给予
{temporary[1] :> 1, temporary[2] :> 2}
它有效。这意味着 (*) 几乎是一个解决方案。
我不明白为什么它适用于临时而不适用于 HoldPattern?如何让它直接与 HoldPattern 一起工作?
当然,问题是评估什么,不评估什么等等。在 Mathematica 中编码时的以太问题。真正的大师的东西......
致以最诚挚的问候 卓然
footnote = 我手动输入它作为替换“/. HoldPattern ->temporary”实际上执行了 f[_]:=0 规则并给出了一些奇怪的东西,我当然想避免这种执行。
【问题讨论】: