如何修复mathematica中的列表分配

发布于 2024-10-11 11:33:02 字数 350 浏览 1 评论 0原文

我想在 Mathematica 中执行以下操作

Table[p[i], {i, -3, 0}] = Flatten[{Table[0, {i, -3, -1}], 1}]

,但出现错误:

Set::write: Tag Table in Table[p[i], {i, -3, 0}] is Protected.

但是,这样做完全没问题:

{p[-3], p[-2], p[-1], p[0]} = Flatten[{Table[0, {i, -3, -1}], 1}]

非常感谢!

I want to do the following in Mathematica

Table[p[i], {i, -3, 0}] = Flatten[{Table[0, {i, -3, -1}], 1}]

But I got an error:

Set::write: Tag Table in Table[p[i], {i, -3, 0}] is Protected.

However, it is perfectly fine to do:

{p[-3], p[-2], p[-1], p[0]} = Flatten[{Table[0, {i, -3, -1}], 1}]

Many thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

筱武穆 2024-10-18 11:33:02

强制 LHS 评估为可分配给的片段:

Evaluate[Table[p[i], {i, -3, 0}]] = Flatten[{Table[0, {i, -3, -1}] , 1}]

Force the LHS to evaluate into pieces that can be assigned to:

Evaluate[Table[p[i], {i, -3, 0}]] = Flatten[{Table[0, {i, -3, -1}], 1}]

贵在坚持 2024-10-18 11:33:02

它不起作用的原因是 Set 具有属性 HoldFirst。这意味着 Set[a,stuff] 将符号 a 而不是 a 的值传递给 Set 函数。至于为什么它有这个属性,问问自己:当你执行Set[a,stuff]时,你是否要将stuff赋值给符号a >,或者 a 的值?

在您的示例中,a 保存一个变量名称表,因此您需要 a 的值,而 HoldFirst 很烦人。但是,大多数时候 a 的值类似于 5,并且您希望 a=stuff 分配 stuff到符号 a,而不是值 5

绕过 Holding 属性的常见模式如下:

Set@@{Table[p[i], {i, -3, 0}],Flatten[{Table[0, {i, -3, -1}], 1}]}

The reason it doesn't work is because Set has attribute HoldFirst. It means that Set[a,stuff] passes symbol a instead of value of a to Set function. As to why it has this attribute, ask yourself: when you do Set[a,stuff], do you want to assign stuff to symbol a, or to the value of a?

In your example, a holds a table of variable names, so you want the value of a and HoldFirst is annoying. However, most of the time a will have a value like 5 and you want a=stuff to assign stuff to symbol a, not to the value 5

A common pattern to get around Holding attributes is the following:

Set@@{Table[p[i], {i, -3, 0}],Flatten[{Table[0, {i, -3, -1}], 1}]}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文