2012-02-04 35 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