2012-02-04 34 views
3

我想使用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}]] 

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

+0

Margus,如果你有更多的*数学*相关的问题,我建议你加入我们的http://mathematica.stackexchange.com - 这是更为积极,现在比StackOverflow(用于mathematica标签),你会得到更快的答案。 – 2012-02-05 00:20:03

+0

Margus:PE等级12.干得好! – 2012-02-05 00:33:59

回答

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这里保持了左侧过早地评估。

+0

有趣的使用'未评估'。我以为你必须做一个'Hold'和'ReleaseHold'来让它工作。 ......但当然不是:)有时你只需要看它跑来知道该怎么办 – 2012-02-05 00:20:49

+0

@Mike坦言'未评价'是相当难以预测的。看到列昂尼德的评论[这个答案。](http://stackoverflow.com/a/5723277/618728) – 2012-02-05 00:22:35

+0

我必须承认,我会期望表达保持未评估。我不会与那些持有和未评估过的表达式一起工作,因为通常不会有直觉的感觉。 'With With'HoldForm'和我一样复杂:) – 2012-02-05 00:24:54

3

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

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

这是另一种方式来做到这一点。 – 2012-02-05 00:20:51

+1

...并且还使用With:'With [{x = ...},Count [x,8]/Length [x]]' – kkm 2012-02-05 10:24:31