16

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

4

4 回答 4

15

更新: Mathematica 10 已经引入Association,它具有许多最重要的属性struct。(请参阅新答案。)该答案的原始版本,有些已被弃用,如下所示。


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

person = {firstName -> "John", lastName -> "Doe"}

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

firstName /. person

产量John

lastName /. person

产量Doe

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

PrependTo[person , firstName -> "Jane"]

firstName /. person然后产生Jane

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

于 2009-09-22T11:17:49.370 回答
8

如果我正确理解您的问题,您可以简单地编写如下内容:

x[foo] = 酒吧
x[bar] = baz
x[1] = 7
x[7] = 1
?X

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

于 2009-09-21T06:42:41.200 回答
3

Mathematica 10 已经引入Association,它具有许多最重要的属性struct

someData = <| "name" -> "Bob", "age" -> 23 |>

In[1]:= someData["name"]
Out[1]= Bob

In[2]:= someData["age"]
Out[2]= 23

In[3]:= someData[[2]]
Out[3]= 23

有关详细信息,请参阅

于 2015-11-01T17:37:45.543 回答
2

这种方式可以工作:

x[foo] = bar

x[bar] = baz

x[1] = 7

x[7] = 1

x[c] = {{1,2,3},{4,5,6}}

并且还可以更改列表字段的元素,您可以执行以下操作:

x[c] = ReplacePart[x[c], {1, 1} -> 8]

返回:

x[c] = {{8,2,3},{4,5,6}}
于 2010-02-05T11:20:57.220 回答