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}]]

これを回避できますか?何が起こっていますか?

4

2 に答える 2

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ここでは、左側が時期尚早に評価されるのを防ぎます。

于 2012-02-05T00:15:35.743 に答える
3

これがエラーを生成する理由xは、値がなく、Length[x]ゼロを返すためです。あなたがする必要があるのはxを定義することです:

x=Flatten[Table[a 2 + b, {a, 6}, {b, 6}]];
Count[x, 8]/Length[x] 
于 2012-02-05T00:17:49.667 に答える