代码之家  ›  专栏  ›  技术社区  ›  Rob N

为什么这个mathematica模式变量没有计算?

  •  1
  • Rob N  · 技术社区  · 15 年前

    In[264]  :=  1 /. x_ -> {x, f[x], ToString[x]}
    Out[264] := {1, f[1], "x"}
    

    In[267]:= y = 2;
       ToString[y]
    Out[268]= "2"
    

    谢谢,
    抢劫

    2 回复  |  直到 15 年前
        1
  •  4
  •   Michael Pilat    15 年前

    在进行替换之前,正在对规则的右侧进行求值,因此需要使用 RuleDelayed ( :> Rule ( -> ):

    In[1]:= 1 /. x_ :> {x, f[x], ToString[x]}
    
    Out[1]= {1, f[1], "1"}
    

    规则延迟 Set ( = )以及 SetDelayed := ).

    啊!

        2
  •  3
  •   Cascabel    15 年前

    Trace[1 /. x_ -> {x, f[x], ToString[x]}] . 我目前还没有接触到mathematica,但我相信你会看到,特别是 ToString[x] ,已评估 之前 模式被应用了,所以你做的很有效 1 /. x_ -> {x, f[x], "x"}