Почему эта замена выражения не работает? - PullRequest
3 голосов
/ 05 февраля 2012

Я хочу использовать wolframalpha, чтобы найти вероятность того, что линия y = a x + b пройдет через 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}]]]

, но мне не нравится повторение.Я не совсем уверен, почему следующее не будет работать:

Count[x, 8]/Length[x] /. x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]

Могу ли я обойти это и что происходит?

Ответы [ 2 ]

4 голосов
/ 05 февраля 2012

Порядок оценки в этом не тот, который вы желаете:

Count[x, 8]/Length[x] /. x -> Flatten[Table[a 2 + b, {a, 6}, {b, 6}]]

Левая сторона /. оценивает перед заменой и поэтому становится: Indeterminate

Вам нужноотложить оценку.Обычный метод для этого - использовать «чистую функцию».См. Функция & и Слот # :

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 здесь удерживает левую часть от преждевременной оценки.

3 голосов
/ 05 февраля 2012

Причина, по которой возникает ошибка, заключается в том, что x не имеет значения, а Length[x] возвращает нольЧто вам нужно сделать, это определить х:

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