重载集合[a, b] (a = b)

2023-12-07

我想重载 Mathematica 的 Set 函数 (=),这对我来说太棘手了(请参阅下面的代码示例)。我成功重载了其他函数(例如代码示例中的 Reverse)。有什么建议么?

In[17]:= ClearAll[struct];

In[18]:= var1=struct[{1,2}]
Out[18]= struct[{1,2}]

In[19]:= Reverse@var1
Out[19]= struct[{1,2}]

In[20]:= Head[var1]
Out[20]= struct

In[21]:= struct/:Reverse[stuff_struct]:=struct[Reverse@stuff[[1]]]

In[22]:= Reverse@var1
Out[22]= struct[{2,1}]

In[23]:= struct/:Set[stuff_struct,rhs_]:=Set[struct[[1]],rhs]

In[24]:= var1="Success!"
Out[24]= Success!

In[25]:= var1
Out[25]= Success!

In[26]:= Head[var1]
Out[26]= String

In[27]:= ??struct
Global`struct
Reverse[stuff_struct]^:=struct[Reverse[stuff[[1]]]]

(stuff_struct=rhs_)^:=struct[[1]]=rhs

我不认为你想要的可以用UpValues(唉),因为符号(标签)必须不超过一级才能定义工作。此外,您想要的语义在 Mathematica 中有些不寻常,因为大多数 Mathematica 表达式都是不可变的(不是 L 值),并且它们的部分不能被赋值。我相信这段代码会做与你想要的类似的事情:

Unprotect[Set];
Set[var_Symbol, rhs_] /; 
   MatchQ[Hold[var] /. OwnValues[var], Hold[_struct]] := Set[var[[1]], rhs];
Protect[Set];

例如:

In[33]:= var1 = struct[{1, 2}]

Out[33]= struct[{1, 2}]

In[34]:= var1 = "Success!"

Out[34]= "Success!"

In[35]:= var1

Out[35]= struct["Success!"]

但一般情况下,添加DownValues诸如此类的重要命令Set不建议这样做,因为这可能会以微妙的方式损坏系统。

EDIT

稍微扩展一下您的尝试失败的原因:Mathematica 使用参数保持机制实现流程控制和赋值运算符(Hold*- 属性,描述here)。特别是,这种机制允许它模仿赋值所需的按引用传递语义。但是,当你分配给var1, Set不知道里面存储了什么var1已经,因为它只有符号var1,而不是它的值。图案_struct不匹配,因为即使变量已经存储了一些struct, Set只有变量名。为了匹配成功,里面的变量Set必须评估其价值。但是,该值是不可变的,您不能分配给它。我建议的代码测试变量是否具有以下形式的指定值struct[something],如果是,则修改第一部分(Part命令是一个例外,它可以修改 L 值表达式的部分(前提是这些部分已经存在)。

您可以阅读有关以下主题的更多信息Hold*- 例如很多地方的属性和相关问题here and here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重载集合[a, b] (a = b) 的相关文章

  • 可以使用其他编程语言(python/C#)中的 Mathematica 吗?

    是否可以使用其他语言的 Mathematica 计算能力 我需要执行一些复杂的操作 顺便说一句 不一定是符号操作 如果能够直接从我的 python c 程序调用 Mathematica 的函数或运行 Mathematica 的代码 那就太好
  • 简化 Mathematica 中的正则表达式

    我最近发现克莱尼代数 http en wikipedia org wiki Kleene algebra用于操作和简化正则表达式 我想知道这是否已内置到 Mathematica 等任何计算软件程序中 如果有一个计算工具来进行大型表达式的并集
  • 将声音导出为 WAV 文件

    我从来没有在 Mma 中过多地使用声音 I have t Sound List Violin SoundNote 6 我怎样才能导出t作为 WAV 文件 当我尝试显而易见的事情时 Export c test wav t I get 在这个旧
  • 了解内核-前端通信——为什么我的前端冻结?

    EDIT 只需确认您是否可以重现此内容就会很有用 只需一台计算机即可尝试此操作 无需远程连接 Update似乎其他人无法在 Mac 或 Win7 上重现此问题 因此它要么是 WinXP 特定的 要么是我的机器特定的 此时我要放弃了 最好有一
  • 如何用矩阵的一些不连续的行和列形成子矩阵

    我有一个 10 x 10 矩阵 我想从这个主矩阵形成一个子矩阵 使用除第一 第二和第八列和行之外的所有行和列 我知道 Part 可以用来形成子矩阵 但这些示例主要是关于仅使用连续的行和列形成子矩阵 如果这是你的矩阵 tst RandomIn
  • 有没有办法自动将Matlab 中的结果或数据导入到Mathematica 中?

    有没有办法将结果或数据 例如矩阵 从Matlab导入到Mathematica自动地 或者有什么方法可以先运行Matlab程序 然后运行Mathematica程序自动地 感谢您提供任何有用的答案 至少有三种方法可以解决这个问题 通过 Java
  • PlotLegends 使 Manipulate[] ing 图形变得慢如爬行

    我设置了一个简短的程序 使用 Manipulate 显示具有不同参数的相同函数的三个图 我想用参数的值来标记每个函数 我的出发点是让一个传奇人物出现 在绘图中添加 PlotLegend 会导致 Mathematica 变得异常缓慢 我的代码
  • 将符号暴露给 $ContextPath

    有多种Internal 有用的上下文函数 例如InheritedBlock https stackoverflow com questions 4198961 what is in your mathematica tool bag 568
  • 如何捕获 TimeConstrained 产生的中断?

    数学有CheckAbort允许捕获和处理用户生成的和编程的函数Aborts 但它不允许捕获由以下函数生成的中断TimeConstrained and MemoryConstrained TimeConstrained CheckAbort
  • 在 Mathematica 中计算此递推关系的更有效方法

    Verbeia 对 Mathematica 中函数式编程风格的表现展开了一场相当有趣的讨论 在这里能找到它 在 Mathematica 中构建大型分块矩阵最有效的方法是什么 https stackoverflow com q 6867079
  • Mathematica 中的分类树实现

    我想使用以下方法实现简单的分类树 二元分类 数学 我怎样才能实现二叉树数学 有这样做的符号吗 我想说这取决于你想用数据结构做什么 您可以利用 Mathematica 表达式本身就是树的事实 如果只有叶节点相关 则使用嵌套列表 例如 1 2
  • 在 Mathematica 中使用图形进行渐变填充

    我如何使用以下内容创建Rectangle in Graphics Using Polygon 你可以 Graphics EdgeForm Black Polygon 0 0 3 0 3 1 0 1 VertexColors gt White
  • Mathematica 的模式匹配优化不佳?

    我最近询问了为什么PatternTest引起了大量不必要的评估 PatternTest 未优化 https stackoverflow com questions 8484299 patterntest not optimized列昂尼德回
  • 在 Mathematica 中创建具有不同颜色边的图形

    我想创建一个图 图论 其中某些边具有与其他边不同的颜色 这将用于突出显示图中从一个顶点到另一个顶点的路径 以下是一些具有不同颜色边缘的示例http demonstrations wolfram com AGraphTheoryInterpr
  • 如何在mathematica中进行函数替换

    我有这样的表情D f x y x 我想替换f x y with x y 我尝试了以下方法 D f x y x f x y gt x y and D f x y x f gt x y 但两者都不起作用 将不胜感激您的帮助 谢谢 The Ful
  • 将纬度/经度转换为 X/Y,以便在美国地图图像上进行阿尔伯斯投影

    我正在尝试使用 C 或 Javascript 将纬度 经度转换为 X Y 坐标 以将带有 CSS 的 div 左 上 定位到美国地图的背景图像上 美国的标准地图投影是阿尔伯斯投影 如下所示 但 StackOverflow 仅提供参考基本墨卡
  • Mathematica 中的数据缓存

    有一个非常耗时的操作在我的包中生成数据集 我想保存此数据集 并仅在我手动删除缓存文件时才让包重建它 这是我的方法作为包的一部分 myDataset Module fname data fname cached data mx If File
  • Mathematica:如何获取plot命令绘制的数据点?

    当使用 Plot 绘制函数时 我想获取由 Plot 命令绘制的数据点集 例如 如何获取以下简单示例中使用的点 t f Plot 的列表 f Sin t Plot f t 0 10 我尝试使用一种将值附加到列表的方法 如 Jerry B Ke
  • 如何使带有两个for循环的python代码运行得更快(有没有一种python方法可以进行Mathematica的并行化)?

    我对 python 或任何此类编程语言完全陌生 我对 Mathematica 有一些经验 我有一个数学问题 虽然 Mathematica 用她自己的 并行化 方法解决了这个问题 但在使用所有核心后 系统却变得非常疲惫 在跑步过程中我几乎无法
  • .NETLink Graphics 生成 PNG 而不是 EMF

    下面的 C 代码应该生成 EMF 但查看输出 在 Vim 中 显示它是 PNG 也许有人在 S O 知道一个好的解决方法或解决方案 MathKernel k new MathKernel k CaptureGraphics true k G

随机推荐

  • 如何将position_dodge()和geom_line()与重叠分组结合起来?

    当 x 轴上的分组变量 颜色和线条重叠但总是不同时 是否可以使用 geom line 在躲避点之间绘制一条线 下图中的灰线应该始终连接两个具有相同名称的数据点 它们位于相同的分组 2 x 轴 内 但位于不同的分组 2 颜色 中 可重现的例子
  • 如何在silverstripe数据扩展中自动发布图像

    我试图将上传字段添加到自定义数据扩展并让图像字段正常工作 但是 我上传的图像仍处于概念模式 我必须转到 文件 选项卡才能发布它 我尝试使用 Silverstripe 文档中提供的代码 但这似乎只适用于常规页面 我发现了一个和我类似的问题 如
  • 在 .htaccess 中使用自定义环境变量

    我需要这样的东西 SetEnv foo bar baz RewriteEngine On RewriteCond HTTP HOST foo RewriteRule http www foo 1 L UPD 我做了如下 SetEnv HOS
  • Struts 2 文件上传 - 空指针异常

    我正在尝试结合使用 Struts2 和 Spring 来上传文件 但是 不知怎的 在到达我的动作课 我的文件之后 filename和文件内容类型都出来了null 我尝试寻找问题所在 但没有结果 下面是我的文件上传的代码 index jsp
  • 如何使用 Mockito 和 JUnit 检查方法中的 if 语句?

    我有我应该测试的方法 代码 当然有些部分被删掉了 public class FilterDataController public static final String DATE FORMAT yyyy MM dd Autowired p
  • 在docker下安装时可以回答对话框问题吗?

    是否可以以某种方式回答使用 apt get 安装某些软件包时以对话框形式出现的问题 例如 我正在尝试设置一个包含以下内容的容器mail stack delivery包装内含 FROM ubuntu RUN apt get install y
  • 如何在android中使用sax解析器从xml读取imageUrl在网格视图中显示图像

    我是安卓新手 我想创建一个应用程序来从 URL 读取 XML 文件并使用图像的 ImageUrl 在网格视图中显示图像 感谢您的回答 但我可以从 url 读取 xml 文件 但我需要 xml imageUrl 是否存在 以便在网格视图中显示
  • 计算原始输入中的元音数

    我有一个家庭作业问题 要求通过原始输入读取字符串并计算字符串中有多少个元音 这是我到目前为止所拥有的 但我遇到了一个问题 def vowels vowels a e i o u count 0 string raw input Enter
  • 运行“sudo pip”有哪些风险?

    偶尔我会遇到评论或回应该状态强调运行pip under sudo是 错误 或 坏 但在某些情况下 包括我设置一堆工具的方式 它要么更简单 要么甚至有必要以这种方式运行 跑步有哪些风险pip under sudo 请注意 这与以下问题不同th
  • 在定义整个映射之前,如何引用映射中的变量?

    我将从我的代码开始 因为它应该更容易理解我想要做什么 function get color color lightness return map get map get colors color lightness colors green
  • Thread.MemoryBarrier 和简单属性的锁区别

    对于以下场景 有什么区别吗关于使用之间的线程安全性 结果和性能MemoryBarrier private SomeType field public SomeType Property get Thread MemoryBarrier So
  • 在 Python 中使用 pynput 检查特定键

    dpressed 0 def on press key if key d global dpressed dpressed 1 logging info D s dpressed 当我运行此代码并按 d 时 没有任何反应 我怀疑这是因为在检
  • Python - isnull().sum() 与 isnull().count()

    所以我目前正在完成泰坦尼克号数据集的教程 https www kaggle com c titanic data 现在我正在尝试一些可能相关的新事物 The info for it is There are 891 entries red
  • 如何在java中进行链式检查

    考虑一个像下面这样的类 public class MyClass private Integer myField private Result result more global variables public MyResult che
  • 尝试使用 Nunit 运行多个 Selenium Webdriver 测试失败

    我想知道是否有人可以在这里帮助我 我将 selenium Webdriver 与 C 和 Nunit 结合使用 当我尝试运行多个测试时 出现以下错误 OpenQA Selenium WebDriverException 意外错误 Syste
  • 实时更新 MySQL 数据

    我有以下代码 它工作得很好 我只是想将其转换为实时状态 以便它每 10 秒左右更新一次 而无需刷新页面 我猜我需要使用 AJAX 或 Jquery 但我缺乏这方面的知识如何做到这一点 VIA ON THE PAGE
  • 将承载令牌传递给不同的 APP_INITIALIZER 以从 Angular 应用程序中的服务器加载配置

    我经历了几个问题 比如1 2但我不知道如何让我的应用程序运行 Problem 当我第一次登录时 我没有得到Bearer token因此我的SettingConfigService失败了401 如果我刷新页面 我会从以下位置获取令牌this
  • 将转储文件导入到 oracle 11gr2 时出现错误

    将转储文件导入到 oracle 11gr2 时出现此错误 请提出解决此问题的方法 Warning the objects were exported by D7IDMP not by you import done in WE8MSWIN1
  • 如何将 Rust 数组转换为指针?

    我在谷歌上找不到简单的东西 如何将简单的 Rust 数组转换为指针 如何获取指向的指针 u8 3 我尝试做as mut u8但这是行不通的 Use as ptr or as mut ptr fn main let a u8 3 1 2 3
  • 重载集合[a, b] (a = b)

    我想重载 Mathematica 的 Set 函数 这对我来说太棘手了 请参阅下面的代码示例 我成功重载了其他函数 例如代码示例中的 Reverse 有什么建议么 In 17 ClearAll struct In 18 var1 struc