2012-02-04 26 views
3

y = a x + bpoint [2,8]を通過する確率を見つけるには、abが公平なダイスロールによって決定されるときに、wolframalphaを使用したいと考えています。なぜこの式の置換は機能しませんか?

これは私が欲しいものを行います。

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にご参加をお勧めしますより*のMathematica *関連の質問がある場合:何をする必要があるのxを定義していますStackOverflow(mathematicaタグ用)を使用すると、すぐにより良い回答が得られます。 –

+0

Margus:PEレベル12.よくできました! –

答えて

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'をしてそれを動作させなければならないと思っていました。 ...もちろん、そうではありません:) ...時には、何をするべきかを知るために実行していることが必要な場合があります。 –

+0

@Mikeは、「評価されていない」というのはむしろ予測できません。レオニードのコメントを参照してください[この回答。](@stackoverflow.com/a/5723277/618728) –

+0

私は表現が未評価のままであることを期待していたと認めなければなりません。私は、それほど多くのことを意味するものではない。 'HoldForm'を使った' With'は、私が得意とするほど洗練されています:) –

3

このエラーが発生する理由は、xに値がなく、Length[x]がゼロを返すためです。 - それは、今よりもはるかに有効である

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

これは別の方法です。 –

+1

...またWith:With [{x = ...}、Count [x、8]/Length [x]] ' – kkm

関連する問題