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

Mar*_*gus 4 wolfram-mathematica wolframalpha

y = a x + b我想使用 Wolframalpha 来查找一条线穿过point [2,8]、 时a和的概率b由公平掷骰子确定。

这就是我想要的:

Count[Flatten[Table[a 2 + b, {a,6},{b,6}]],8]/
Length[Flatten[Table[a 2 + b, {a,6},{b,6}]]]
Run Code Online (Sandbox Code Playgroud)

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

Count[x, 8]/Length[x] /. x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]
Run Code Online (Sandbox Code Playgroud)

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

Mr.*_*ard 5

这里的评估顺序不是您想要的:

Count[x, 8]/Length[x] /. x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]
Run Code Online (Sandbox Code Playgroud)

的左侧/.在替换之前求值,因此变为:Indeterminate

您需要延迟评估。通常的方法是使用“纯函数”。请参阅功能 &插槽编号

Count[#, 8]/Length[#] & @ Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]
Run Code Online (Sandbox Code Playgroud)

可以强制 ReplaceAll (缩写形式/.)工作,但它是非标准的:

Unevaluated[ Count[x, 8]/Length[x] ] /.
    x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]
Run Code Online (Sandbox Code Playgroud)

Unevaluted这里可以防止左侧过早评估。