Wolfram mathematica 为什么不计算mathematica模式变量?

Wolfram mathematica 为什么不计算mathematica模式变量?,wolfram-mathematica,Wolfram Mathematica,显然,这些模式变量不像我预期的那样工作。下面是一个简单的例子: In[264] := 1 /. x_ -> {x, f[x], ToString[x]} Out[264] := {1, f[1], "x"} 为什么最后一个元素是“x”而不是“1”。以下工作与预期的一样 In[267]:= y = 2; ToString[y] Out[268]= "2" 谢谢, Rob尝试跟踪[1/.x.->{x,f[x],ToString[x]}]。我目前无法访问mathematica,但我

显然,这些模式变量不像我预期的那样工作。下面是一个简单的例子:

In[264]  :=  1 /. x_ -> {x, f[x], ToString[x]}
Out[264] := {1, f[1], "x"}
为什么最后一个元素是“x”而不是“1”。以下工作与预期的一样

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

Rob

尝试
跟踪[1/.x.->{x,f[x],ToString[x]}]
。我目前无法访问mathematica,但我相信您会看到替换,特别是
ToString[x]
,在应用模式之前进行评估,因此您实际上是在执行
1/。x->{x,f[x],“x”}

尝试
跟踪[1/.x->{x,f[x],ToString[x]}]
。我目前无法访问mathematica,但我相信您会看到替换,特别是
ToString[x]
,在应用模式之前进行评估,因此您实际上是在执行
1/。x->{x,f[x],“x”}

在替换发生之前正在评估规则的右侧,因此您需要使用
RuleDelayed
:>
)而不是
规则
->
):

规则
规则延迟
类似于
设置
=
)和
设置延迟
:=


规则的右侧将在替换发生之前进行评估,因此您需要使用
RuleDelayed
:>
)而不是
rule
->
):

规则
规则延迟
类似于
设置
=
)和
设置延迟
:=


好的,你想用
规则延迟
,也就是说,
:>
而不是
->
规则
)。@Michael:你应该把它作为一个单独的答案发布,这样我就可以投票了,OP就可以接受了!谢谢,就这样。RuleDelayed而不是Rule。对,你想使用
RuleDelayed
,也就是说,
:>
而不是
->
规则
)。@Michael:你应该把它作为一个单独的答案发布,这样我可以投票,OP可以接受它!谢谢,就这样。规则延迟而不是规则。
In[1]:= 1 /. x_ :> {x, f[x], ToString[x]}

Out[1]= {1, f[1], "1"}