Overbar como contador em um loop
Quero criar uma mesa com quatro contadores diferentes que quero chamar $a, \bar{a}, b, \bar{b}$. Para isso, meu código óbvio é
$$\text{Table}\left[p\left[a,\bar{a},b,\bar{b}\right],\{a,0,1\},\left\{\bar{a},0,1\right\},\{b,0,1\},\left\{\bar{b},0,1\right\}\right] // \text{Grid}$$
que retorna
{{p[0,0,0,0],p[0,1,0,1]},{p[0,1,1,0],p[0,1,1,1]}} {{p[0,0,0,0],p[0,1,0,1]},{p[0,1,1,0],p[0,1,1,1]}}
{{p[1,0,0,0],p[1,0,0,1]},{p[1,0,1,0],p[1,1,1,1]}} {{p[1,1,0,0],p[1,1,0,1]},{p[1,0,1,0],p[1,1,1,1]}}
No entanto, uma rápida olhada mostra que este não é o resultado esperado - os elementos da primeira linha são repetidos. Se eu escrever
Table[p[a, c, b, d] , {a, 0, 1}, {c, 0, 1}, {b, 0, 1}, {d, 0, 1}] // Grid
em vez disso, obtenho a saída desejada. Portanto, minha pergunta é dupla:
- Por que isso acontece?
- Como pode ser consertado? Ou seja, posso usar variáveis como$\bar{a}$ ou $a'$ ou $a_1$ para loops modificando algo ou sou forçado a usar outros nomes que não envolvam esses símbolos?
Respostas
Você pode fornecer OverBaro HoldFirstatributo para que ele não dependa do valor de a:
SetAttributes[OverBar,HoldFirst]
Então:
t1 = Table[
p[a, OverBar[a], b, OverBar[b]],
{a, 0, 1}, {OverBar[a], 0, 1}, {b, 0, 1}, {OverBar[b], 0, 1}
];
t2 = Table[p[a, c, b, d], {a, 0, 1}, {c, 0, 1}, {b, 0, 1}, {d, 0, 1}];
t1 === t2
Verdadeiro
O problema é que o Mathematica trata OverBarcomo uma função, então OverBar[a]é uma função do seu símbolo a, não um símbolo independente.
Eu evitaria usar esses símbolos, mas se a aparência for importante para você, investigue a Symbolizefuncionalidade do Notationpacote.