为什么这个表达式替换不起作用?

时间:2012-02-04 23:56:18

标签: wolfram-mathematica wolframalpha

我希望使用wolframalpha来查找行y = a x + b通过point [2,8]的概率,当ab由公平骰子确定时。

这就是我想要的:

Count[Flatten[Table[a 2 + b, {a,6},{b,6}]],8]/
Length[Flatten[Table[a 2 + b, {a,6},{b,6}]]]

,但我不喜欢重复。我不完全确定为什么跟随不起作用:

Count[x, 8]/Length[x] /. x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]

我可以解决这个问题以及发生了什么吗?

2 个答案:

答案 0 :(得分:4)

此评估的顺序不是您想要的:

Count[x, 8]/Length[x] /. x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]

/.的左侧在替换前评估,因此变为:Indeterminate

您需要延迟评估。通常的方法是使用“纯函数”。请参阅Function &Slot #

Count[#, 8]/Length[#] & @ Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]

可以强制使用ReplaceAll(短格式/.),但它是非标准的:

Unevaluated[ Count[x, 8]/Length[x] ] /.
    x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]

Unevaluted这里让左手边过早地评估。

答案 1 :(得分:3)

产生错误的原因是x没有值,Length[x]返回零。你需要做的是定义x:

x=Flatten[Table[a 2 + b, {a, 6}, {b, 6}]];
Count[x, 8]/Length[x]