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"}