Mathematica中的结构数据类型?

fel*_*lix 15 struct types wolfram-mathematica

在使用Mathematica的符号和数字功能之后,我发现它也是一种不错的编程语言.但是,作为通用语言使其不那么吸引人的东西是缺少类似C的结构数据类型(或Pascal中已知的记录类型).我怎样才能解决这个问题?

sak*_*kra 15

更新:Mathematica 10已经推出Association,它具有许多最重要的属性struct.(见新答案.)这个答案的原始的,有点弃用的版本如下.


您可以使用Mathematica规则列表来模拟类似C的struct数据类型.例如,:

person = {firstName -> "John", lastName -> "Doe"}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用/.运算符访问记录的字段:

firstName /. person
Run Code Online (Sandbox Code Playgroud)

收益率John.

lastName /. person
Run Code Online (Sandbox Code Playgroud)

收益率Doe.

要更新记录的字段,请将更新的字段添加到列表中:

PrependTo[person , firstName -> "Jane"]
Run Code Online (Sandbox Code Playgroud)

firstName /. person然后收益率Jane.

另请参阅有关转换规则Mathematica文档.

  • 使用预先添加进行一些更改意味着许多未使用的规则将出现在人员列表中.不是很有效率. (2认同)

Wil*_*son 8

如果我正确理解你的问题,你可以简单地写下这样的事情:

x[foo] = bar
x[bar] = baz
x[1] = 7
x[7] = 1
?x

然后访问任何特定索引的数据只需键入相同的内容(例如,x[1]将返回7,x[foo]将返回bar).

  • 您的答案有问题:如果"字段"是列表,则其元素不能单独更改.例如,x [foo] = {1,2}; x [foo] [[1]] = 3(*尝试更改列表元素*)将导致错误,因为x [foo]不是左值.所以它仍然没有完全取代C struct功能. (2认同)