rro ao gerar variáveis localizadas (como constante
A mensagem de uso paraSet
nos lembra que várias tarefas podem ser feitas facilmente em duas listas, sem ter que separar nada. Por exemplo
Remove[x1, x2, y1, y2, z1, z2];
{x1, x2} = {a, b}
Executa a tarefa e retorna:
{a, b}
Thread
, comumente usado para gerar listas de regras, também pode ser chamado explicitamente para obter o mesmo resultado:
Thread[{y1, y2} = {a, b}]
Thread[{z1, z2} -> {a, b}]
Gives:
{a, b}
{z1 -> a, z2 -> b}
No entanto, empregar essa abordagem para gerar constantes localizadas gera um erro. Considere esta função de exemplo trivial:
Remove[f];
f[x_] :=
With[{{x1, x2} = {a, b}},
x + x1 + x2
]
f[z]
Aqui está a mensagem de erro:
With::lvset: "Local variable specification {{x1,x2}={a,b}} contains
{x1,x2}={a,b}, which is an assignment to {x1,x2}; only assignments
to symbols are allowed."
A documentação da mensagem de erro ref/message/With/lvw
), diz na seção "Mais informações" que "Esta mensagem é gerada quando o primeiro elemento em Com não é uma lista de atribuições para símbolos. "Dada essa explicação, entendo a mecânica do motivo pelo qual minha tarefa falhou. Mesmo assim, estou intrigado e imaginando se essa é uma restrição necessária do WRI ou se há uma pequena supervisão de projeto que deve ser relatad
Então, aqui está a minha pergunta:
Alguém pode lançar alguma luz sobre esse comportamento e / ou oferecer uma solução alternativ Eu experimentei tentando forçarEvaluation
, sem sorte, e não tenho certeza do que mais tenta